This commit is contained in:
2024-02-07 01:33:07 -05:00
commit c1af19d441
4088 changed files with 1260170 additions and 0 deletions

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
{"version":3,"file":"NodeParserBasics.test.js","sourceRoot":"","sources":["../../../src/parser/__tests__/NodeParserBasics.test.ts"],"names":[],"mappings":";;AAAA,6CAA4C;AAE5C,IAAI,CAAC,0BAA0B,EAAE;IAC/B,yBAAW,CAAC,+BAA+B,CACzC;QACE,KAAK;QACL,YAAY;QACZ,WAAW;QACX,KAAK;KACN,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,+BAA+B,EAAE;IACpC,yBAAW,CAAC,+BAA+B,CAAC,OAAO,CAAC,CAAC;IAErD,yBAAW,CAAC,+BAA+B,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAE7E,yBAAW,CAAC,+BAA+B,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACnF,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,yCAAyC,EAAE;IAC9C,yBAAW,CAAC,+BAA+B,CAAC,CAAC,KAAK,EAAE,gBAAgB,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3F,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,yCAAyC,EAAE;IAC9C,yBAAW,CAAC,+BAA+B,CACzC,CAAC,KAAK,EAAE,2CAA2C,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CACvE,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["import { TestHelpers } from './TestHelpers';\r\n\r\ntest('00 Tokenizer simple case', () => {\r\n TestHelpers.parseAndMatchNodeParserSnapshot(\r\n [\r\n '/**',\r\n ' * line 1 ', // extra space at end of line\r\n ' * line 2',\r\n ' */'\r\n ].join('\\n')\r\n );\r\n});\r\n\r\ntest('01 Tokenizer degenerate cases', () => {\r\n TestHelpers.parseAndMatchNodeParserSnapshot('/***/');\r\n\r\n TestHelpers.parseAndMatchNodeParserSnapshot(['/**', ' *', ' */'].join('\\n'));\r\n\r\n TestHelpers.parseAndMatchNodeParserSnapshot(['/**', ' ', ' ', ' */'].join('\\n'));\r\n});\r\n\r\ntest('02 Backslash escapes: positive examples', () => {\r\n TestHelpers.parseAndMatchNodeParserSnapshot(['/**', ' * \\\\$\\\\@param', ' */'].join('\\n'));\r\n});\r\n\r\ntest('03 Backslash escapes: negative examples', () => {\r\n TestHelpers.parseAndMatchNodeParserSnapshot(\r\n ['/**', ' * letter: \\\\A space: \\\\ end of line: \\\\', ' */'].join('\\n')\r\n );\r\n});\r\n"]}

View File

@ -0,0 +1 @@
{"version":3,"file":"NodeParserCode.test.js","sourceRoot":"","sources":["../../../src/parser/__tests__/NodeParserCode.test.ts"],"names":[],"mappings":";;AAAA,6CAA4C;AAE5C,IAAI,CAAC,8BAA8B,EAAE;IACnC,yBAAW,CAAC,+BAA+B,CAAC,CAAC,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1G,yBAAW,CAAC,+BAA+B,CAAC,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACrF,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,8BAA8B,EAAE;IACnC,yBAAW,CAAC,+BAA+B,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAChG,yBAAW,CAAC,+BAA+B,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAClF,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,yBAAyB,EAAE;IAC9B,yBAAW,CAAC,+BAA+B,CACzC;QACE,KAAK;QACL,yCAAyC;QACzC,sBAAsB;QACtB,uBAAuB;QACvB,WAAW;QACX,KAAK;KACN,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;IACF,yBAAW,CAAC,+BAA+B,CACzC;QACE,KAAK;QACL,kEAAkE;QAClE,QAAQ;QACR,uBAAuB;QACvB,UAAU;KACX,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,yBAAyB,EAAE;IAC9B,yBAAW,CAAC,+BAA+B,CACzC,CAAC,KAAK,EAAE,qCAAqC,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAC9E,CAAC;IACF,yBAAW,CAAC,+BAA+B,CACzC,CAAC,KAAK,EAAE,sCAAsC,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAC5E,CAAC;IACF,yBAAW,CAAC,+BAA+B,CACzC,CAAC,KAAK,EAAE,uCAAuC,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CACxE,CAAC;IACF,yBAAW,CAAC,+BAA+B,CACzC,CAAC,KAAK,EAAE,uCAAuC,EAAE,mBAAmB,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CACxF,CAAC;IACF,yBAAW,CAAC,+BAA+B,CACzC,CAAC,KAAK,EAAE,+BAA+B,EAAE,uBAAuB,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CACpF,CAAC;IACF,yBAAW,CAAC,+BAA+B,CACzC,CAAC,KAAK,EAAE,sCAAsC,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CACtG,CAAC;IACF,yBAAW,CAAC,+BAA+B,CACzC;QACE,KAAK;QACL,qDAAqD;QACrD,QAAQ;QACR,SAAS;QACT,WAAW;QACX,KAAK;KACN,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["import { TestHelpers } from './TestHelpers';\r\n\r\ntest('00 Code span basic, positive', () => {\r\n TestHelpers.parseAndMatchNodeParserSnapshot(['/**', ' * line `1`', ' * line ` 2` sdf', ' */'].join('\\n'));\r\n TestHelpers.parseAndMatchNodeParserSnapshot(['/**', ' * M`&`M', ' */'].join('\\n'));\r\n});\r\n\r\ntest('01 Code span basic, negative', () => {\r\n TestHelpers.parseAndMatchNodeParserSnapshot(['/**', ' * `multi', ' * line`', ' */'].join('\\n'));\r\n TestHelpers.parseAndMatchNodeParserSnapshot(['/**', ' * ``', ' */'].join('\\n'));\r\n});\r\n\r\ntest('03 Code fence, positive', () => {\r\n TestHelpers.parseAndMatchNodeParserSnapshot(\r\n [\r\n '/**',\r\n ' * This is a code fence with all parts:',\r\n ' * ```a language! ',\r\n ' * some `code` here',\r\n ' * ``` ',\r\n ' */'\r\n ].join('\\n')\r\n );\r\n TestHelpers.parseAndMatchNodeParserSnapshot(\r\n [\r\n '/**',\r\n ' * This is a code fence with no language or trailing whitespace:',\r\n ' * ```',\r\n ' * some `code` here',\r\n ' * ```*/'\r\n ].join('\\n')\r\n );\r\n});\r\n\r\ntest('04 Code fence, negative', () => {\r\n TestHelpers.parseAndMatchNodeParserSnapshot(\r\n ['/**', ' * Code fence incorrectly indented:', ' * ```', ' */'].join('\\n')\r\n );\r\n TestHelpers.parseAndMatchNodeParserSnapshot(\r\n ['/**', ' * Code fence not starting the line:', ' *a```', ' */'].join('\\n')\r\n );\r\n TestHelpers.parseAndMatchNodeParserSnapshot(\r\n ['/**', ' * Code fence not being terminated 1:', ' * ```*/'].join('\\n')\r\n );\r\n TestHelpers.parseAndMatchNodeParserSnapshot(\r\n ['/**', ' * Code fence not being terminated 2:', ' * ``` some stuff', ' */'].join('\\n')\r\n );\r\n TestHelpers.parseAndMatchNodeParserSnapshot(\r\n ['/**', ' * Language having backticks:', ' * ``` some stuff ```', ' */'].join('\\n')\r\n );\r\n TestHelpers.parseAndMatchNodeParserSnapshot(\r\n ['/**', ' * Closing delimiter being indented:', ' * ```', ' * code', ' * ```', ' */'].join('\\n')\r\n );\r\n TestHelpers.parseAndMatchNodeParserSnapshot(\r\n [\r\n '/**',\r\n ' * Closing delimiter not being on a line by itself:',\r\n ' * ```',\r\n ' * code',\r\n ' * ``` a',\r\n ' */'\r\n ].join('\\n')\r\n );\r\n});\r\n"]}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
{"version":3,"file":"NodeParserInheritDocTag.test.js","sourceRoot":"","sources":["../../../src/parser/__tests__/NodeParserInheritDocTag.test.ts"],"names":[],"mappings":";;AAAA,6CAA4C;AAE5C,IAAI,CAAC,sCAAsC,EAAE;IAC3C,yBAAW,CAAC,+BAA+B,CAAC,CAAC,KAAK,EAAE,kBAAkB,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3F,yBAAW,CAAC,+BAA+B,CAAC,CAAC,KAAK,EAAE,+BAA+B,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACxG,yBAAW,CAAC,+BAA+B,CACzC,CAAC,KAAK,EAAE,0CAA0C,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CACtE,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,sCAAsC,EAAE;IAC3C,yBAAW,CAAC,+BAA+B,CAAC,CAAC,KAAK,EAAE,8BAA8B,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACvG,yBAAW,CAAC,+BAA+B,CAAC,CAAC,KAAK,EAAE,+BAA+B,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACxG,yBAAW,CAAC,+BAA+B,CACzC,CAAC,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAClE,CAAC;IACF,yBAAW,CAAC,+BAA+B,CACzC,CAAC,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,kBAAkB,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAChF,CAAC;IAEF,2BAA2B;IAC3B,yBAAW,CAAC,+BAA+B,CACzC,CAAC,KAAK,EAAE,wDAAwD,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CACpF,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["import { TestHelpers } from './TestHelpers';\r\n\r\ntest('00 InheritDoc tag: positive examples', () => {\r\n TestHelpers.parseAndMatchNodeParserSnapshot(['/**', ' * {@inheritDoc}', ' */'].join('\\n'));\r\n TestHelpers.parseAndMatchNodeParserSnapshot(['/**', ' * {@inheritDoc Class.member}', ' */'].join('\\n'));\r\n TestHelpers.parseAndMatchNodeParserSnapshot(\r\n ['/**', ' * {@inheritDoc package# Class . member}', ' */'].join('\\n')\r\n );\r\n});\r\n\r\ntest('01 InheritDoc tag: negative examples', () => {\r\n TestHelpers.parseAndMatchNodeParserSnapshot(['/**', ' * {@inheritDoc | link text}', ' */'].join('\\n'));\r\n TestHelpers.parseAndMatchNodeParserSnapshot(['/**', ' * {@inheritDoc Class % junk}', ' */'].join('\\n'));\r\n TestHelpers.parseAndMatchNodeParserSnapshot(\r\n ['/**', ' * {@inheritDoc}', ' * {@inheritDoc}', ' */'].join('\\n')\r\n );\r\n TestHelpers.parseAndMatchNodeParserSnapshot(\r\n ['/**', ' * summary text', ' * @remarks', ' * {@inheritDoc}', ' */'].join('\\n')\r\n );\r\n\r\n // Old API Extractor syntax\r\n TestHelpers.parseAndMatchNodeParserSnapshot(\r\n ['/**', ' * {@inheritdoc @scope/library:IDisposable.isDisposed}', ' */'].join('\\n')\r\n );\r\n});\r\n"]}

View File

@ -0,0 +1 @@
{"version":3,"file":"NodeParserLinkTag.test.js","sourceRoot":"","sources":["../../../src/parser/__tests__/NodeParserLinkTag.test.ts"],"names":[],"mappings":";;AAAA,6CAA4C;AAE5C,IAAI,CAAC,iCAAiC,EAAE;IACtC,yBAAW,CAAC,+BAA+B,CACzC;QACE,KAAK;QACL,gCAAgC;QAChC,iCAAiC;QACjC,kCAAkC;QAClC,0CAA0C;QAC1C,sCAAsC;QACtC,YAAY;QACZ,kCAAkC;QAClC,eAAe;QACf,QAAQ;QACR,KAAK;KACN,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,iCAAiC,EAAE;IACtC,yBAAW,CAAC,+BAA+B,CACzC,CAAC,KAAK,EAAE,YAAY,EAAE,6CAA6C,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CACvF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,uCAAuC,EAAE;IAC5C,yBAAW,CAAC,+BAA+B,CACzC;QACE,KAAK;QACL,gCAAgC;QAChC,gDAAgD;QAChD,gCAAgC;QAChC,KAAK;KACN,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,uCAAuC,EAAE;IAC5C,yBAAW,CAAC,+BAA+B,CACzC;QACE,KAAK;QACL,uCAAuC;QACvC,iDAAiD;QACjD,mCAAmC;QACnC,oCAAoC;QACpC,2BAA2B;QAC3B,oBAAoB;QACpB,KAAK;KACN,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,+DAA+D,EAAE;IACpE,yBAAW,CAAC,+BAA+B,CACzC;QACE,KAAK;QACL,yBAAyB;QACzB,+BAA+B;QAC/B,qCAAqC;QACrC,4CAA4C;QAC5C,gCAAgC;QAChC,KAAK;KACN,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,+DAA+D,EAAE;IACpE,yBAAW,CAAC,+BAA+B,CACzC;QACE,KAAK;QACL,uBAAuB;QACvB,2BAA2B;QAC3B,6BAA6B;QAC7B,wBAAwB;QACxB,iCAAiC;QACjC,oBAAoB;QACpB,KAAK;KACN,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;IACF,yBAAW,CAAC,+BAA+B,CACzC,CAAC,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,oBAAoB,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CACjF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,mEAAmE,EAAE;IACxE,yBAAW,CAAC,+BAA+B,CACzC,CAAC,KAAK,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,8BAA8B,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CACzG,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,mEAAmE,EAAE;IACxE,yBAAW,CAAC,+BAA+B,CACzC,CAAC,KAAK,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAC5E,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["import { TestHelpers } from './TestHelpers';\r\n\r\ntest('00 Link text: positive examples', () => {\r\n TestHelpers.parseAndMatchNodeParserSnapshot(\r\n [\r\n '/**',\r\n ' * {@link http://example1.com}',\r\n ' * {@link http://example2.com|}',\r\n ' * {@link http://example3.com| }',\r\n ' * {@link http://example4.com|link text}',\r\n ' * 1{@link http://example5.com| link',\r\n ' * text }2',\r\n ' * 3{@link http://example5.com| ',\r\n ' * link text ',\r\n ' * }4',\r\n ' */'\r\n ].join('\\n')\r\n );\r\n});\r\n\r\ntest('01 Link text: negative examples', () => {\r\n TestHelpers.parseAndMatchNodeParserSnapshot(\r\n ['/**', ' * {@link}', ' * {@link http://example1.com| link | text}', ' */'].join('\\n')\r\n );\r\n});\r\n\r\ntest('02 URL destination: positive examples', () => {\r\n TestHelpers.parseAndMatchNodeParserSnapshot(\r\n [\r\n '/**',\r\n ' * {@link http://example1.com}',\r\n ' * {@link https://example2.com#hash|link text}',\r\n ' * {@link customscheme://data}',\r\n ' */'\r\n ].join('\\n')\r\n );\r\n});\r\n\r\ntest('03 URL destination: negative examples', () => {\r\n TestHelpers.parseAndMatchNodeParserSnapshot(\r\n [\r\n '/**',\r\n ' * {@link http://example1.com spaces}',\r\n ' * {@link http://example2.com spaces|link text}',\r\n ' * {@link ftp+ssh://example3.com}',\r\n ' * {@link mailto:bob@example4.com}',\r\n ' * {@link //example5.com}',\r\n ' * {@link http://}',\r\n ' */'\r\n ].join('\\n')\r\n );\r\n});\r\n\r\ntest('04 Declaration reference with package name: positive examples', () => {\r\n TestHelpers.parseAndMatchNodeParserSnapshot(\r\n [\r\n '/**',\r\n ' * {@link my-example1#}',\r\n ' * {@link my-example2/path3#}',\r\n ' * {@link my-example4/path5/path6#}',\r\n ' * {@link @scope/my-example7/path8/path9#}',\r\n ' * {@link @scope/my-example7#}',\r\n ' */'\r\n ].join('\\n')\r\n );\r\n});\r\n\r\ntest('05 Declaration reference with package name: negative examples', () => {\r\n TestHelpers.parseAndMatchNodeParserSnapshot(\r\n [\r\n '/**',\r\n ' * {@link example1/#}',\r\n ' * {@link example2/a//b#}',\r\n ' * {@link @scope/ex@mple3#}',\r\n ' * {@link @/example4#}',\r\n ' * {@link @scope//my-example5#}',\r\n ' * {@link @scope#}',\r\n ' */'\r\n ].join('\\n')\r\n );\r\n TestHelpers.parseAndMatchNodeParserSnapshot(\r\n ['/**', ' * {@link @#}', ' * {@link #}', ' * {@link #Button}', ' */'].join('\\n')\r\n );\r\n});\r\n\r\ntest('06 Declaration reference with import path only: positive examples', () => {\r\n TestHelpers.parseAndMatchNodeParserSnapshot(\r\n ['/**', ' * {@link ../path1#}', ' * {@link ./path2#}', ' * {@link ./path3/../path4#}', ' */'].join('\\n')\r\n );\r\n});\r\n\r\ntest('07 Declaration reference with import path only: negative examples', () => {\r\n TestHelpers.parseAndMatchNodeParserSnapshot(\r\n ['/**', ' * {@link /path1#}', ' * {@link /path1 path2#}', ' */'].join('\\n')\r\n );\r\n});\r\n"]}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
{"version":3,"file":"NodeParserLinkTag3.test.js","sourceRoot":"","sources":["../../../src/parser/__tests__/NodeParserLinkTag3.test.ts"],"names":[],"mappings":";;AAAA,6CAA4C;AAE5C,IAAI,CAAC,yCAAyC,EAAE;IAC9C,yBAAW,CAAC,+BAA+B,CACzC;QACE,KAAK;QACL,wDAAwD;QACxD,sFAAsF;QACtF,KAAK;KACN,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,yCAAyC,EAAE;IAC9C,yBAAW,CAAC,+BAA+B,CACzC,CAAC,KAAK,EAAE,uDAAuD,EAAE,sBAAsB,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAC3G,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,yBAAyB,EAAE;IAC9B,yBAAW,CAAC,+BAA+B,CACzC;QACE,KAAK;QACL,qGAAqG;QACrG,KAAK;KACN,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["import { TestHelpers } from './TestHelpers';\r\n\r\ntest('00 Symbol references: positive examples', () => {\r\n TestHelpers.parseAndMatchNodeParserSnapshot(\r\n [\r\n '/**',\r\n ' * {@link Class1.[WellknownSymbols.toStringPrimitive]}',\r\n ' * {@link Class1 . ( [ WellknownSymbols . toStringPrimitive ] : static) | link text}',\r\n ' */'\r\n ].join('\\n')\r\n );\r\n});\r\n\r\ntest('01 Symbol references: negative examples', () => {\r\n TestHelpers.parseAndMatchNodeParserSnapshot(\r\n ['/**', ' * {@link Class1.[WellknownSymbols.toStringPrimitive}', ' * {@link Class1.[]}', ' */'].join('\\n')\r\n );\r\n});\r\n\r\ntest('02 Complicated examples', () => {\r\n TestHelpers.parseAndMatchNodeParserSnapshot(\r\n [\r\n '/**',\r\n ' * {@link ./lib/controls/Button#Button.([(WellknownSymbols:namespace).toStringPrimitive]:instance)}',\r\n ' */'\r\n ].join('\\n')\r\n );\r\n});\r\n"]}

View File

@ -0,0 +1 @@
{"version":3,"file":"NodeParserTags.test.js","sourceRoot":"","sources":["../../../src/parser/__tests__/NodeParserTags.test.ts"],"names":[],"mappings":";;AAAA,6CAA4C;AAE5C,IAAI,CAAC,kCAAkC,EAAE;IACvC,yBAAW,CAAC,+BAA+B,CAAC,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAChG,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,kCAAkC,EAAE;IACvC,yBAAW,CAAC,+BAA+B,CACzC,CAAC,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CACjE,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,kCAAkC,EAAE;IACvC,yBAAW,CAAC,+BAA+B,CACzC,CAAC,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,qBAAqB,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CACvG,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,kCAAkC,EAAE;IACvC,yBAAW,CAAC,+BAA+B,CACzC,CAAC,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CACtF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,mCAAmC,EAAE;IACxC,yBAAW,CAAC,+BAA+B,CACzC,CAAC,KAAK,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAClF,CAAC;IACF,yBAAW,CAAC,+BAA+B,CAAC,CAAC,KAAK,EAAE,sBAAsB,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACjG,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,oCAAoC,EAAE;IACzC,yBAAW,CAAC,+BAA+B,CACzC,CAAC,KAAK,EAAE,8CAA8C,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAC1E,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,oCAAoC,EAAE;IACzC,yBAAW,CAAC,+BAA+B,CAAC,CAAC,KAAK,EAAE,mBAAmB,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5F,yBAAW,CAAC,+BAA+B,CAAC,CAAC,KAAK,EAAE,mBAAmB,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5F,yBAAW,CAAC,+BAA+B,CAAC,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACxF,CAAC,CAAC,CAAC","sourcesContent":["import { TestHelpers } from './TestHelpers';\r\n\r\ntest('00 Block tags: positive examples', () => {\r\n TestHelpers.parseAndMatchNodeParserSnapshot(['/**', ' * @one ', ' * @two', ' */'].join('\\n'));\r\n});\r\n\r\ntest('01 Block tags: negative examples', () => {\r\n TestHelpers.parseAndMatchNodeParserSnapshot(\r\n ['/**', ' * @ one ', ' * +@two ', ' * @two+ ', ' */'].join('\\n')\r\n );\r\n});\r\n\r\ntest('02 Inline tags: simple, positive', () => {\r\n TestHelpers.parseAndMatchNodeParserSnapshot(\r\n ['/**', ' * {@one} ', ' * {@two } ', ' * {@three}{@four} ', ' * {@five ', ' * } ', ' */'].join('\\n')\r\n );\r\n});\r\n\r\ntest('03 Inline tags: simple, negative', () => {\r\n TestHelpers.parseAndMatchNodeParserSnapshot(\r\n ['/**', ' * {@ one} ', ' * {@two~} ', ' * { @three} ', ' * {@four', ' */'].join('\\n')\r\n );\r\n});\r\n\r\ntest('04 Inline tags: complex, positive', () => {\r\n TestHelpers.parseAndMatchNodeParserSnapshot(\r\n ['/**', ' * {@one some content}', ' * {@two multi', ' * line}', ' */'].join('\\n')\r\n );\r\n TestHelpers.parseAndMatchNodeParserSnapshot(['/**', ' * {@three @taglike}', ' */'].join('\\n'));\r\n});\r\n\r\ntest('05 Inline tags: escaping, positive', () => {\r\n TestHelpers.parseAndMatchNodeParserSnapshot(\r\n ['/**', ' * {@one left \\\\{ right \\\\} backslash \\\\\\\\ }', ' */'].join('\\n')\r\n );\r\n});\r\n\r\ntest('06 Inline tags: escaping, negative', () => {\r\n TestHelpers.parseAndMatchNodeParserSnapshot(['/**', ' * {@one curly\\\\}', ' */'].join('\\n'));\r\n TestHelpers.parseAndMatchNodeParserSnapshot(['/**', ' * {@two curly{}}', ' */'].join('\\n'));\r\n TestHelpers.parseAndMatchNodeParserSnapshot(['/**', ' * three: }', ' */'].join('\\n'));\r\n});\r\n"]}

View File

@ -0,0 +1 @@
{"version":3,"file":"NodeParserValidationChecks.test.js","sourceRoot":"","sources":["../../../src/parser/__tests__/NodeParserValidationChecks.test.ts"],"names":[],"mappings":";;AAAA,6CAA4C;AAE5C,IAAI,CAAC,oCAAoC,EAAE;IACzC,yBAAW,CAAC,+BAA+B,CACzC,CAAC,KAAK,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CACtE,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,oCAAoC,EAAE;IACzC,yBAAW,CAAC,+BAA+B,CACzC,CAAC,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CACjE,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["import { TestHelpers } from './TestHelpers';\r\n\r\ntest('00 Deprecated block: positive test', () => {\r\n TestHelpers.parseAndMatchNodeParserSnapshot(\r\n ['/**', ' * @deprecated', ' * Use the other thing', ' */'].join('\\n')\r\n );\r\n});\r\n\r\ntest('01 Deprecated block: negative test', () => {\r\n TestHelpers.parseAndMatchNodeParserSnapshot(\r\n ['/**', ' * @deprecated', ' * ', ' * @public', ' */'].join('\\n')\r\n );\r\n});\r\n"]}

View File

@ -0,0 +1,147 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.TestHelpers = void 0;
var TSDocParser_1 = require("../TSDocParser");
var nodes_1 = require("../../nodes");
var TSDocConfiguration_1 = require("../../configuration/TSDocConfiguration");
var TokenCoverageChecker_1 = require("./TokenCoverageChecker");
var TestHelpers = /** @class */ (function () {
function TestHelpers() {
}
/**
* Pretty print a line with "<" and ">" markers to indicate a text range.
*/
TestHelpers.formatLineSpan = function (line, range) {
if (range.pos < line.pos || range.end > line.end) {
throw new Error('Range must fall within the associated line');
}
var paddedSpace = ['', ' ', ' ', ' ', ' '];
var paddedLArrow = ['', '>', ' >', ' >', ' >'];
var paddedRArrow = ['', '<', '< ', '< ', '< '];
var buffer = line.buffer;
var span = '';
if (line.end > 0) {
var i = line.pos - 1;
while (i < range.pos - 1) {
span += paddedSpace[TestHelpers.getEscaped(buffer[i]).length];
++i;
}
span += paddedLArrow[TestHelpers.getEscaped(buffer[i]).length];
++i;
while (i < range.end) {
span += paddedSpace[TestHelpers.getEscaped(buffer[i]).length];
++i;
}
if (i === line.end) {
span += '<';
}
else {
span += paddedRArrow[TestHelpers.getEscaped(buffer[i]).length];
++i;
while (i < line.end) {
span += paddedSpace[TestHelpers.getEscaped(buffer[i]).length];
++i;
}
}
}
return span;
};
/**
* Workaround various characters that get ugly escapes in Jest snapshots
*/
TestHelpers.getEscaped = function (s) {
return s
.replace(/\n/g, '[n]')
.replace(/\r/g, '[r]')
.replace(/\t/g, '[t]')
.replace(/\f/g, '[f]')
.replace(/\\/g, '[b]')
.replace(/\"/g, '[q]')
.replace(/`/g, '[c]')
.replace(/\</g, '[<]')
.replace(/\>/g, '[>]');
};
/**
* Main harness for tests under `./parser/*`.
*/
TestHelpers.parseAndMatchNodeParserSnapshot = function (buffer, config) {
var configuration = config !== null && config !== void 0 ? config : new TSDocConfiguration_1.TSDocConfiguration();
// For the parser tests, we use lots of custom tags without bothering to define them
configuration.validation.ignoreUndefinedTags = true;
var tsdocParser = new TSDocParser_1.TSDocParser(configuration);
var parserContext = tsdocParser.parseString(buffer);
expect({
buffer: TestHelpers.getEscaped(buffer),
lines: parserContext.lines.map(function (x) { return TestHelpers.getEscaped(x.toString()); }),
logMessages: parserContext.log.messages.map(function (message) { return message.text; }),
nodes: TestHelpers.getDocNodeSnapshot(parserContext.docComment),
gaps: this._getTokenCoverageGapsSnapshot(parserContext)
}).toMatchSnapshot();
TestHelpers._getTokenCoverageGapsSnapshot(parserContext);
};
/**
* Main harness for tests under `./details/*`.
*/
TestHelpers.parseAndMatchDocCommentSnapshot = function (buffer, configuration) {
var tsdocParser = new TSDocParser_1.TSDocParser(configuration);
var parserContext = tsdocParser.parseString(buffer);
var docComment = parserContext.docComment;
expect({
s00_lines: parserContext.lines.map(function (x) { return TestHelpers.getEscaped(x.toString()); }),
s01_gaps: this._getTokenCoverageGapsSnapshot(parserContext),
s02_summarySection: TestHelpers.getDocNodeSnapshot(docComment.summarySection),
s03_remarksBlock: TestHelpers.getDocNodeSnapshot(docComment.remarksBlock),
s04_privateRemarksBlock: TestHelpers.getDocNodeSnapshot(docComment.privateRemarks),
s05_deprecatedBlock: TestHelpers.getDocNodeSnapshot(docComment.deprecatedBlock),
s06_paramBlocks: docComment.params.blocks.map(function (x) { return TestHelpers.getDocNodeSnapshot(x); }),
s07_typeParamBlocks: docComment.typeParams.blocks.map(function (x) { return TestHelpers.getDocNodeSnapshot(x); }),
s08_returnsBlock: TestHelpers.getDocNodeSnapshot(docComment.returnsBlock),
s09_customBlocks: docComment.customBlocks.map(function (x) { return TestHelpers.getDocNodeSnapshot(x); }),
s10_inheritDocTag: TestHelpers.getDocNodeSnapshot(docComment.inheritDocTag),
s11_modifierTags: docComment.modifierTagSet.nodes.map(function (x) { return TestHelpers.getDocNodeSnapshot(x); }),
s12_logMessages: parserContext.log.messages.map(function (message) { return message.text; })
}).toMatchSnapshot();
return parserContext;
};
/**
* Render a nice Jest snapshot object for a DocNode tree.
*/
TestHelpers.getDocNodeSnapshot = function (docNode) {
if (!docNode) {
return undefined;
}
var item = {
kind: docNode.kind
};
if (docNode instanceof nodes_1.DocExcerpt) {
item.kind += ': ' + docNode.excerptKind;
item.nodeExcerpt = TestHelpers.getEscaped(docNode.content.toString());
}
if (docNode instanceof nodes_1.DocPlainText) {
var docPlainText = docNode;
if (docPlainText.textExcerpt === undefined) {
item.nodePlainText = TestHelpers.getEscaped(docPlainText.text);
}
}
if (docNode instanceof nodes_1.DocErrorText) {
item.errorMessage = TestHelpers.getEscaped(docNode.errorMessage);
item.errorLocation = TestHelpers.getEscaped(docNode.errorLocation.toString());
if (docNode.errorLocation.startIndex > 0) {
// Show the preceding token to provide some context (e.g. is this the opening quote
// or closing quote?)
item.errorLocationPrecedingToken = docNode.errorLocation.parserContext.tokens[docNode.errorLocation.startIndex - 1].toString();
}
}
if (docNode.getChildNodes().length > 0) {
item.nodes = docNode.getChildNodes().map(function (x) { return TestHelpers.getDocNodeSnapshot(x); });
}
return item;
};
TestHelpers._getTokenCoverageGapsSnapshot = function (parserContext) {
var tokenCoverageChecker = new TokenCoverageChecker_1.TokenCoverageChecker(parserContext);
return tokenCoverageChecker.getGaps(parserContext.docComment).map(function (x) { return x.toString(); });
};
return TestHelpers;
}());
exports.TestHelpers = TestHelpers;
//# sourceMappingURL=TestHelpers.js.map

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
{"version":3,"file":"TextRange.test.js","sourceRoot":"","sources":["../../../src/parser/__tests__/TextRange.test.ts"],"names":[],"mappings":";;AAAA,0CAAyC;AACzC,6CAA4C;AAE5C,SAAS,aAAa,CAAC,SAAoB;IACzC,KAAK,IAAI,CAAC,GAAW,CAAC,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE;QACpD,6BAA6B;QAC7B,IAAM,CAAC,GAAW,yBAAW,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAErF,yCAAyC;QACzC,IAAM,OAAO,GAAW,yBAAW,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAE5F,MAAM,CAAC;YACL,CAAC,EAAE,CAAC;YACJ,OAAO,EAAE,OAAO;YAChB,CAAC,EAAE,CAAC;YACJ,QAAQ,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;SACnC,CAAC,CAAC,eAAe,EAAE,CAAC;KACtB;AACH,CAAC;AAED,IAAI,CAAC,wBAAwB,EAAE;IAC7B,IAAM,MAAM,GAAW,YAAY,CAAC;IACpC,IAAM,SAAS,GAAc,qBAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAC1D,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAE7C,IAAM,QAAQ,GAAc,SAAS,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACxD,MAAM,CAAC,QAAQ,CAAC,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;AAC/C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,qBAAqB,EAAE;IAC1B,IAAM,SAAS,GAAc,qBAAS,CAAC,UAAU,CAC/C;QACE,IAAI;QACJ,IAAI;QACJ,EAAE;QACF,IAAI;QACJ,iCAAiC;KAClC,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;IACF,aAAa,CAAC,SAAS,CAAC,CAAC;AAC3B,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,4BAA4B,EAAE;IACjC,IAAM,SAAS,GAAc,qBAAS,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IACtD,aAAa,CAAC,SAAS,CAAC,CAAC;AAC3B,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,yBAAyB,EAAE;IAC9B,IAAM,SAAS,GAAc,qBAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACxD,aAAa,CAAC,SAAS,CAAC,CAAC;AAC3B,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,yBAAyB,EAAE;IAC9B,IAAM,SAAS,GAAc,qBAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACxD,aAAa,CAAC,SAAS,CAAC,CAAC;AAC3B,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,8BAA8B,EAAE;IACnC,4CAA4C;IAC5C,IAAM,SAAS,GAAc,qBAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAC1D,aAAa,CAAC,SAAS,CAAC,CAAC;AAC3B,CAAC,CAAC,CAAC","sourcesContent":["import { TextRange } from '../TextRange';\r\nimport { TestHelpers } from './TestHelpers';\r\n\r\nfunction matchSnapshot(textRange: TextRange): void {\r\n for (let i: number = -1; i <= textRange.end + 1; ++i) {\r\n // Show the current character\r\n const c: string = TestHelpers.getEscaped(textRange.buffer.substr(Math.max(i, 0), 1));\r\n\r\n // Show the next 10 characters of context\r\n const context: string = TestHelpers.getEscaped(textRange.buffer.substr(Math.max(i, 0), 10));\r\n\r\n expect({\r\n c: c,\r\n context: context,\r\n i: i,\r\n location: textRange.getLocation(i)\r\n }).toMatchSnapshot();\r\n }\r\n}\r\n\r\ntest('construction scenarios', () => {\r\n const buffer: string = '0123456789';\r\n const textRange: TextRange = TextRange.fromString(buffer);\r\n expect(textRange.toString()).toEqual(buffer);\r\n\r\n const subRange: TextRange = textRange.getNewRange(3, 6);\r\n expect(subRange).toMatchSnapshot('subRange');\r\n});\r\n\r\ntest('getLocation() basic', () => {\r\n const textRange: TextRange = TextRange.fromString(\r\n [\r\n 'L1',\r\n 'L2',\r\n '', // (line 3 is blank)\r\n 'L4',\r\n 'L5+CR\\rL5+CRLF\\r\\nL6+LFCR\\n\\rL7'\r\n ].join('\\n')\r\n );\r\n matchSnapshot(textRange);\r\n});\r\n\r\ntest('getLocation() empty string', () => {\r\n const textRange: TextRange = TextRange.fromString('');\r\n matchSnapshot(textRange);\r\n});\r\n\r\ntest('getLocation() CR string', () => {\r\n const textRange: TextRange = TextRange.fromString('\\r');\r\n matchSnapshot(textRange);\r\n});\r\n\r\ntest('getLocation() LF string', () => {\r\n const textRange: TextRange = TextRange.fromString('\\n');\r\n matchSnapshot(textRange);\r\n});\r\n\r\ntest('getLocation() tab characters', () => {\r\n // Tab character advances by only one column\r\n const textRange: TextRange = TextRange.fromString('1\\t3');\r\n matchSnapshot(textRange);\r\n});\r\n"]}

View File

@ -0,0 +1,121 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.TokenCoverageChecker = void 0;
var nodes_1 = require("../../nodes");
var TokenSequence_1 = require("../TokenSequence");
var Token_1 = require("../Token");
/**
* The TokenCoverageChecker performs two diagnostics to detect parser bugs:
* 1. It checks for two DocNode objects whose excerpt contains overlapping tokens.
* By design, a single character from the input stream should be associated with
* at most one TokenSequence.
* 2. It checks for gaps, i.e. input tokens that were not associated with any DocNode
* (that is reachable from the final DocCommon node tree). In some cases this is
* okay. For example, if `@public` appears twice inside a comment, the second
* redundant instance is ignored. But in general we want to track the gaps in the
* unit test snapshots to ensure in general that every input character is associated
* with an excerpt for a DocNode.
*/
var TokenCoverageChecker = /** @class */ (function () {
function TokenCoverageChecker(parserContext) {
this._parserContext = parserContext;
this._tokenAssociations = [];
this._tokenAssociations.length = parserContext.tokens.length;
}
TokenCoverageChecker.prototype.getGaps = function (rootNode) {
this._addNodeTree(rootNode);
return this._checkForGaps(false);
};
TokenCoverageChecker.prototype.reportGaps = function (rootNode) {
this._addNodeTree(rootNode);
this._checkForGaps(true);
};
TokenCoverageChecker.prototype._addNodeTree = function (node) {
if (node instanceof nodes_1.DocExcerpt) {
this._addSequence(node.content, node);
}
for (var _i = 0, _a = node.getChildNodes(); _i < _a.length; _i++) {
var childNode = _a[_i];
this._addNodeTree(childNode);
}
};
TokenCoverageChecker.prototype._addSequence = function (tokenSequence, docNode) {
var newTokenAssociation = { docNode: docNode, tokenSequence: tokenSequence };
for (var i = tokenSequence.startIndex; i < tokenSequence.endIndex; ++i) {
var tokenAssociation = this._tokenAssociations[i];
if (tokenAssociation) {
throw new Error("Overlapping content encountered between" +
(" " + this._formatTokenAssociation(tokenAssociation) + " and") +
(" " + this._formatTokenAssociation(newTokenAssociation)));
}
this._tokenAssociations[i] = newTokenAssociation;
}
};
TokenCoverageChecker.prototype._checkForGaps = function (reportGaps) {
var gaps = [];
var gapStartIndex = undefined;
var tokenAssociationBeforeGap = undefined;
var tokens = this._parserContext.tokens;
if (tokens[tokens.length - 1].kind !== Token_1.TokenKind.EndOfInput) {
throw new Error('Missing EndOfInput token');
}
for (var i = 0; i < this._parserContext.tokens.length - 1; ++i) {
var tokenAssociation = this._tokenAssociations[i];
if (gapStartIndex === undefined) {
// No gap found yet
if (tokenAssociation) {
tokenAssociationBeforeGap = tokenAssociation;
}
else {
// We found the start of a gap
gapStartIndex = i;
}
}
else {
// Is this the end of the gap?
if (tokenAssociation) {
var gap = new TokenSequence_1.TokenSequence({
parserContext: this._parserContext,
startIndex: gapStartIndex,
endIndex: i
});
if (reportGaps) {
this._reportGap(gap, tokenAssociationBeforeGap, tokenAssociation);
}
gaps.push(gap);
gapStartIndex = undefined;
tokenAssociationBeforeGap = undefined;
}
}
}
if (gapStartIndex) {
var gap = new TokenSequence_1.TokenSequence({
parserContext: this._parserContext,
startIndex: gapStartIndex,
endIndex: this._parserContext.tokens.length
});
if (reportGaps) {
this._reportGap(gap, tokenAssociationBeforeGap, undefined);
}
gaps.push(gap);
}
return gaps;
};
TokenCoverageChecker.prototype._reportGap = function (gap, tokenAssociationBeforeGap, tokenAssociationAfterGap) {
var message = 'Gap encountered';
if (tokenAssociationBeforeGap) {
message += ' before ' + this._formatTokenAssociation(tokenAssociationBeforeGap);
}
if (tokenAssociationAfterGap) {
message += ' after ' + this._formatTokenAssociation(tokenAssociationAfterGap);
}
message += ': ' + JSON.stringify(gap.toString());
throw new Error(message);
};
TokenCoverageChecker.prototype._formatTokenAssociation = function (tokenAssociation) {
return tokenAssociation.docNode.kind + " (" + JSON.stringify(tokenAssociation.tokenSequence.toString()) + ")";
};
return TokenCoverageChecker;
}());
exports.TokenCoverageChecker = TokenCoverageChecker;
//# sourceMappingURL=TokenCoverageChecker.js.map

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long