Skip to content

Commit 74af9ca

Browse files
committed
feat(isc): handle generic field heredocs, list values with comments
Codemod: any field with ': |' heredoc, ': "quoted"' multi-line, or ':\n - list' format is now handled generically. Verification: 271/289 (94%), 16 ISC fail.
1 parent a83e868 commit 74af9ca

1 file changed

Lines changed: 28 additions & 2 deletions

File tree

exe/codemod-imp-to-isc

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -293,8 +293,8 @@ module Interscript
293293
@out << "\n#{indent}notes {"
294294
convert_notes_list_until_dedent(indent)
295295
@out << "\n#{indent}}"
296-
elsif @scanner.scan(/(?:\A|\n)([ \t]+)([A-Za-z_][\w]*)[ \t]*:[ \t]*\n(?:[ \t]*#[^\n]*\n)*([ \t]+)-[ \t]*/)
297-
# Multi-line list value: `field:\n # optional comment\n - item1\n - item2`
296+
elsif @scanner.scan(/(?:\A|\n)([ \t]+)([A-Za-z_][\w]*)[ \t]*:[ \t]*\n([ \t]+)-[ \t]*/)
297+
# Multi-line list value: `field:\n - item1\n - item2`
298298
indent = @scanner[1]
299299
field = @scanner[2]
300300
item_indent = @scanner[3]
@@ -306,6 +306,32 @@ module Interscript
306306
text = @scanner.scan(/[^\n]+/).to_s
307307
@out << " " + text
308308
end
309+
elsif @scanner.scan(/(?:\A|\n)([ \t]+)([A-Za-z_][\w]*)[ \t]*:[ \t]*\n[ \t]+"/)
310+
# Generic field with multi-line quoted value
311+
indent = @scanner[1]
312+
field = @scanner[2]
313+
@out << "\n#{indent}#{field} \""
314+
until @scanner.eos?
315+
if @scanner.scan(/[^"\n]+/)
316+
@out << @scanner.matched
317+
elsif @scanner.scan(/"/)
318+
@out << @scanner.matched
319+
break
320+
elsif @scanner.scan(/\n[ \t]+/)
321+
@out << " "
322+
elsif @scanner.scan(/\n/)
323+
@out << " "
324+
else
325+
break
326+
end
327+
end
328+
elsif @scanner.scan(/(?:\A|\n)([ \t]+)([A-Za-z_][\w]*)[ \t]*:[ \t]*\|[ \t]*\n/)
329+
# Generic field with heredoc: `field: |\n body`
330+
indent = @scanner[1]
331+
field = @scanner[2]
332+
@out << "\n#{indent}#{field} { "
333+
convert_indented_block_until_dedent(indent)
334+
@out << " }"
309335
# key: value -> key value, only when the key is at the start of a
310336
# (indented) line. Use [ \t] instead of \s to avoid eating newlines
311337
# (which would merge `key:\n next:` into `key next:`).

0 commit comments

Comments
 (0)