From ab76b911afab63c9e5d1e5d861285b1508ccb15e Mon Sep 17 00:00:00 2001 From: Microsoft Auto Changeset Bot Date: Wed, 6 Sep 2023 15:31:07 -0700 Subject: [PATCH 1/2] fix compiler freeze when invalid token in model --- packages/compiler/src/core/parser.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/compiler/src/core/parser.ts b/packages/compiler/src/core/parser.ts index 538cc4c04e5..10e9d50a539 100644 --- a/packages/compiler/src/core/parser.ts +++ b/packages/compiler/src/core/parser.ts @@ -2596,6 +2596,7 @@ function createParser(code: string | SourceFile, options: ParseOptions = {}): Pa const items: T[] = []; while (true) { + const startingPos = tokenPos(); const { pos, docs, directives, decorators } = parseAnnotations({ skipParsingDocNodes: Boolean(kind.invalidAnnotationTarget), }); @@ -2670,7 +2671,7 @@ function createParser(code: string | SourceFile, options: ParseOptions = {}): Pa parseExpected(kind.delimiter); } - if (pos === tokenPos()) { + if (startingPos === tokenPos()) { // Error recovery: we've inserted everything during this loop iteration // and haven't made any progress. Assume that the current token is a bad // representation of the end of the the list that we're trying to get From ee1e5cb03f1f3debe7378fe0963e7efa076cafc2 Mon Sep 17 00:00:00 2001 From: Microsoft Auto Changeset Bot Date: Wed, 6 Sep 2023 15:34:12 -0700 Subject: [PATCH 2/2] Add test and changelog --- .../compiler/fix-doc-freeze_2023-09-06-22-33.json | 10 ++++++++++ packages/compiler/test/parser.test.ts | 1 + 2 files changed, 11 insertions(+) create mode 100644 common/changes/@typespec/compiler/fix-doc-freeze_2023-09-06-22-33.json diff --git a/common/changes/@typespec/compiler/fix-doc-freeze_2023-09-06-22-33.json b/common/changes/@typespec/compiler/fix-doc-freeze_2023-09-06-22-33.json new file mode 100644 index 00000000000..aaec925d834 --- /dev/null +++ b/common/changes/@typespec/compiler/fix-doc-freeze_2023-09-06-22-33.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@typespec/compiler", + "comment": "Fix: Compiler freeze when using invalid token between doc comment and type", + "type": "none" + } + ], + "packageName": "@typespec/compiler" +} \ No newline at end of file diff --git a/packages/compiler/test/parser.test.ts b/packages/compiler/test/parser.test.ts index 97a16a9f151..ed9fbb64ed3 100644 --- a/packages/compiler/test/parser.test.ts +++ b/packages/compiler/test/parser.test.ts @@ -323,6 +323,7 @@ describe("compiler: parser", () => { describe("recovery", () => { parseErrorEach([ [`model M { ]`, [/Property expected/]], + [`model M { /** */ */ prop: string }`, [/Property expected/]], [ ` @dec1 @dec2 import "foo";