From 0f255e0a361fd35f2544b0fa100044ad65d3953d Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Wed, 19 Mar 2025 21:49:35 +0000 Subject: [PATCH 1/3] Add test case. --- tests/cases/compiler/erasableSyntaxOnly2.ts | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 tests/cases/compiler/erasableSyntaxOnly2.ts diff --git a/tests/cases/compiler/erasableSyntaxOnly2.ts b/tests/cases/compiler/erasableSyntaxOnly2.ts new file mode 100644 index 0000000000000..f2b7a34637e9e --- /dev/null +++ b/tests/cases/compiler/erasableSyntaxOnly2.ts @@ -0,0 +1,6 @@ +// @erasableSyntaxOnly: true + +// @filename: index.ts +let a = ( Date: Wed, 19 Mar 2025 21:53:05 +0000 Subject: [PATCH 2/3] Switch span reporting to avoid bounds violation. --- src/compiler/checker.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 843b5b2f94d66..0dcaaf9c7a8c5 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -37316,8 +37316,8 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { grammarErrorOnNode(node, Diagnostics.This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead); } if (compilerOptions.erasableSyntaxOnly) { - const start = node.type.pos - "<".length; - const end = skipTrivia(file.text, node.type.end) + ">".length; + const start = skipTrivia(file.text, node.pos); + const end = node.expression.pos; diagnostics.add(createFileDiagnostic(file, start, end - start, Diagnostics.This_syntax_is_not_allowed_when_erasableSyntaxOnly_is_enabled)); } } From 0bdf91456cc0ea6618f2692726f0c7c70c11a2ae Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Wed, 19 Mar 2025 21:53:13 +0000 Subject: [PATCH 3/3] Accepted baselines. --- .../reference/erasableSyntaxOnly2.errors.txt | 24 ++++++++++++++ .../reference/erasableSyntaxOnly2.js | 11 +++++++ .../reference/erasableSyntaxOnly2.symbols | 13 ++++++++ .../reference/erasableSyntaxOnly2.types | 31 +++++++++++++++++++ 4 files changed, 79 insertions(+) create mode 100644 tests/baselines/reference/erasableSyntaxOnly2.errors.txt create mode 100644 tests/baselines/reference/erasableSyntaxOnly2.js create mode 100644 tests/baselines/reference/erasableSyntaxOnly2.symbols create mode 100644 tests/baselines/reference/erasableSyntaxOnly2.types diff --git a/tests/baselines/reference/erasableSyntaxOnly2.errors.txt b/tests/baselines/reference/erasableSyntaxOnly2.errors.txt new file mode 100644 index 0000000000000..4ceb70cc1dbf7 --- /dev/null +++ b/tests/baselines/reference/erasableSyntaxOnly2.errors.txt @@ -0,0 +1,24 @@ +index.ts(1,10): error TS1294: This syntax is not allowed when 'erasableSyntaxOnly' is enabled. +index.ts(1,19): error TS1005: '>' expected. +index.ts(2,9): error TS1294: This syntax is not allowed when 'erasableSyntaxOnly' is enabled. +index.ts(2,18): error TS1005: '>' expected. +index.ts(3,9): error TS1294: This syntax is not allowed when 'erasableSyntaxOnly' is enabled. +index.ts(3,17): error TS1005: '>' expected. + + +==== index.ts (6 errors) ==== + let a = (' expected. + let b = ' expected. + let c = ' expected. \ No newline at end of file diff --git a/tests/baselines/reference/erasableSyntaxOnly2.js b/tests/baselines/reference/erasableSyntaxOnly2.js new file mode 100644 index 0000000000000..132a9ff4941d3 --- /dev/null +++ b/tests/baselines/reference/erasableSyntaxOnly2.js @@ -0,0 +1,11 @@ +//// [tests/cases/compiler/erasableSyntaxOnly2.ts] //// + +//// [index.ts] +let a = (a : Symbol(a, Decl(index.ts, 0, 3)) +>foo : Symbol(foo, Decl(index.ts, 0, 17)) + +let b = b : Symbol(b, Decl(index.ts, 1, 3)) + +let c = c : Symbol(c, Decl(index.ts, 2, 3)) + diff --git a/tests/baselines/reference/erasableSyntaxOnly2.types b/tests/baselines/reference/erasableSyntaxOnly2.types new file mode 100644 index 0000000000000..84259782e5d09 --- /dev/null +++ b/tests/baselines/reference/erasableSyntaxOnly2.types @@ -0,0 +1,31 @@ +//// [tests/cases/compiler/erasableSyntaxOnly2.ts] //// + +=== index.ts === +let a = (a : unknown +> : ^^^^^^^ +>( : ^^^^^^^ +> : ^^^^^^^ +>function foo() {} : () => void +> : ^^^^^^^^^^ +>foo : () => void +> : ^^^^^^^^^^ + +let b = b : unknown +> : ^^^^^^^ +> : ^^^^^^^ +>123 : 123 +> : ^^^ + +let c = c : unknown +> : ^^^^^^^ +> : ^^^^^^^ +> : any +> : ^^^ +