From 437006101b11c066f36ac2dbf563dac95fcb5d14 Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders <293473+sandersn@users.noreply.github.com> Date: Tue, 10 Dec 2024 10:41:39 -0800 Subject: [PATCH 1/3] Shebang error parsing: compatibility with tsc In tsc, `#!` anywhere except pos=0 in a file gives an error and increments past `#`. In tsgo, it was incrementing past `#!`. tsc's behaviour seems bad, but not bad enough to differ from, especially since the parse tree will be wrong either way. --- internal/scanner/scanner.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/scanner/scanner.go b/internal/scanner/scanner.go index ab883c9166..f561320c23 100644 --- a/internal/scanner/scanner.go +++ b/internal/scanner/scanner.go @@ -707,7 +707,7 @@ func (s *Scanner) Scan() ast.Kind { continue } s.errorAt(diagnostics.X_can_only_be_used_at_the_start_of_a_file, s.pos, 2) - s.pos += 2 + s.pos++ s.token = ast.KindUnknown break } From f2ba49959447cd383087d4d3ba61ef60c287e8ad Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders <293473+sandersn@users.noreply.github.com> Date: Fri, 13 Dec 2024 07:06:51 -0800 Subject: [PATCH 2/3] bonus:initial scan ends at any line break not just unix ones --- internal/scanner/scanner.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/scanner/scanner.go b/internal/scanner/scanner.go index 25128e7633..1620aeca29 100644 --- a/internal/scanner/scanner.go +++ b/internal/scanner/scanner.go @@ -703,7 +703,7 @@ func (s *Scanner) Scan() ast.Kind { if s.charAt(1) == '!' { if s.pos == 0 { s.pos += 2 - for s.char() >= 0 && s.char() != '\n' { + for s.char() >= 0 && !stringutil.IsLineBreak(s.char()) { s.pos++ } continue From 45f69fb52ee5c0de73b0ec8b3d04f8d27c2be8d5 Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders <293473+sandersn@users.noreply.github.com> Date: Wed, 18 Dec 2024 14:02:48 -0800 Subject: [PATCH 3/3] shebang scanning: Iterate over utf8 chars not bytes --- internal/scanner/scanner.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/scanner/scanner.go b/internal/scanner/scanner.go index ce09f39e6f..6132a184b6 100644 --- a/internal/scanner/scanner.go +++ b/internal/scanner/scanner.go @@ -707,8 +707,8 @@ func (s *Scanner) Scan() ast.Kind { if s.charAt(1) == '!' { if s.pos == 0 { s.pos += 2 - for s.char() >= 0 && !stringutil.IsLineBreak(s.char()) { - s.pos++ + for ch, size := s.charAndSize(); size > 0 && !stringutil.IsLineBreak(ch); ch, size = s.charAndSize() { + s.pos += size } continue }