@@ -1532,8 +1532,6 @@ namespace Parser {
1532
1532
// Note: any errors at the end of the file that do not precede a regular node, should get
1533
1533
// attached to the EOF token.
1534
1534
var parseErrorBeforeNextFinishedNode = false;
1535
-
1536
- var skipJSDoc = false;
1537
1535
/* eslint-enable no-var */
1538
1536
1539
1537
export function parseSourceFile(fileName: string, sourceText: string, languageVersion: ScriptTarget, syntaxCursor: IncrementalParser.SyntaxCursor | undefined, setParentNodes = false, scriptKind?: ScriptKind, setExternalModuleIndicatorOverride?: (file: SourceFile) => void, skipJSDoc = false): SourceFile {
@@ -1672,7 +1670,6 @@ namespace Parser {
1672
1670
syntaxCursor = _syntaxCursor;
1673
1671
scriptKind = _scriptKind;
1674
1672
languageVariant = getLanguageVariant(_scriptKind);
1675
- skipJSDoc = _skipJSDoc;
1676
1673
1677
1674
parseDiagnostics = [];
1678
1675
parsingContext = 0;
@@ -1701,13 +1698,15 @@ namespace Parser {
1701
1698
scanner.setOnError(scanError);
1702
1699
scanner.setScriptTarget(languageVersion);
1703
1700
scanner.setLanguageVariant(languageVariant);
1701
+ scanner.setSkipJSDoc(_skipJSDoc && !!(contextFlags & NodeFlags.JavaScriptFile));
1704
1702
}
1705
1703
1706
1704
function clearState() {
1707
1705
// Clear out the text the scanner is pointing at, so it doesn't keep anything alive unnecessarily.
1708
1706
scanner.clearCommentDirectives();
1709
1707
scanner.setText("");
1710
1708
scanner.setOnError(undefined);
1709
+ scanner.setSkipJSDoc(false);
1711
1710
1712
1711
// Clear any data. We don't want to accidentally hold onto it for too long.
1713
1712
sourceText = undefined!;
@@ -1722,7 +1721,6 @@ namespace Parser {
1722
1721
identifiers = undefined!;
1723
1722
notParenthesizedArrow = undefined;
1724
1723
topLevel = true;
1725
- skipJSDoc = false;
1726
1724
}
1727
1725
1728
1726
function parseSourceFileWorker(languageVersion: ScriptTarget, setParentNodes: boolean, scriptKind: ScriptKind, setExternalModuleIndicator: (file: SourceFile) => void): SourceFile {
@@ -1739,6 +1737,8 @@ namespace Parser {
1739
1737
const statements = parseList(ParsingContext.SourceElements, parseStatement);
1740
1738
Debug.assert(token() === SyntaxKind.EndOfFileToken);
1741
1739
const endOfFileToken = addJSDocComment(parseTokenNode<EndOfFileToken>());
1740
+ // TODO(jakebailey): this should really be the following, but why isn't the flag set?
1741
+ // const endOfFileToken = withJSDoc(parseTokenNode<EndOfFileToken>(), hasPrecedingJSDocComment());
1742
1742
1743
1743
const sourceFile = createSourceFile(fileName, languageVersion, scriptKind, isDeclarationFile, statements, endOfFileToken, sourceFlags, setExternalModuleIndicator);
1744
1744
@@ -1770,18 +1770,15 @@ namespace Parser {
1770
1770
return hasJSDoc ? addJSDocComment(node) : node;
1771
1771
}
1772
1772
1773
- const seeLink = /@(?:see|link)/;
1774
- function shouldParseJSDoc<T extends HasJSDoc>(node: T, comment: ts.CommentRange) {
1775
- if (!skipJSDoc) return true;
1776
- if (node.flags & NodeFlags.JavaScriptFile) return true;
1777
- if (seeLink.test(sourceText.slice(comment.pos, comment.end))) return true;
1778
- return undefined;
1779
- }
1780
-
1781
1773
let hasDeprecatedTag = false;
1774
+ /**
1775
+ * Adds a JSDoc comment to a node, if any exist.
1776
+ *
1777
+ * Avoid calling this directly; use {@see withJSDoc} instead.
1778
+ */
1782
1779
function addJSDocComment<T extends HasJSDoc>(node: T): T {
1783
1780
Debug.assert(!node.jsDoc); // Should only be called once per node
1784
- const jsDoc = mapDefined(getJSDocCommentRanges(node, sourceText), comment => shouldParseJSDoc(node, comment) && JSDocParser.parseJSDocComment(node, comment.pos, comment.end - comment.pos));
1781
+ const jsDoc = mapDefined(getJSDocCommentRanges(node, sourceText), comment => JSDocParser.parseJSDocComment(node, comment.pos, comment.end - comment.pos));
1785
1782
if (jsDoc.length) node.jsDoc = jsDoc;
1786
1783
if (hasDeprecatedTag) {
1787
1784
hasDeprecatedTag = false;
@@ -5072,7 +5069,7 @@ namespace Parser {
5072
5069
const equalsGreaterThanToken = parseExpectedToken(SyntaxKind.EqualsGreaterThanToken);
5073
5070
const body = parseArrowFunctionExpressionBody(/*isAsync*/ !!asyncModifier, allowReturnTypeInArrowFunction);
5074
5071
const node = factory.createArrowFunction(asyncModifier, /*typeParameters*/ undefined, parameters, /*type*/ undefined, equalsGreaterThanToken, body);
5075
- return addJSDocComment( finishNode(node, pos) );
5072
+ return finishNode(node, pos);
5076
5073
}
5077
5074
5078
5075
function tryParseParenthesizedArrowFunctionExpression(allowReturnTypeInArrowFunction: boolean): Expression | undefined {
0 commit comments