Spaces:
Sleeping
Sleeping
| // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. | |
| // See LICENSE in the project root for license information. | |
| import { DocNode, DocNodeKind } from './DocNode'; | |
| import { TokenKind } from '../parser/Token'; | |
| /* eslint-disable @typescript-eslint/naming-convention */ | |
| /** | |
| * Indicates the type of {@link DocExcerpt}. | |
| */ | |
| export var ExcerptKind; | |
| (function (ExcerptKind) { | |
| ExcerptKind["Spacing"] = "Spacing"; | |
| ExcerptKind["BlockTag"] = "BlockTag"; | |
| ExcerptKind["CodeSpan_OpeningDelimiter"] = "CodeSpan_OpeningDelimiter"; | |
| ExcerptKind["CodeSpan_Code"] = "CodeSpan_Code"; | |
| ExcerptKind["CodeSpan_ClosingDelimiter"] = "CodeSpan_ClosingDelimiter"; | |
| ExcerptKind["DeclarationReference_PackageName"] = "DeclarationReference_PackageName"; | |
| ExcerptKind["DeclarationReference_ImportPath"] = "DeclarationReference_ImportPath"; | |
| ExcerptKind["DeclarationReference_ImportHash"] = "DeclarationReference_ImportHash"; | |
| /** | |
| * Input characters that were reported as an error and do not appear to be part of a valid expression. | |
| * A syntax highlighter might display them with an error color (e.g. red). | |
| */ | |
| ExcerptKind["ErrorText"] = "ErrorText"; | |
| /** | |
| * Input characters that do not conform to the TSDoc specification, but were recognized by the parser, for example | |
| * as a known JSDoc pattern. A syntax highlighter should not display them with an error color (e.g. red) | |
| * because the error reporting may be suppressed for "lax" parsing of legacy source code. | |
| */ | |
| ExcerptKind["NonstandardText"] = "NonstandardText"; | |
| ExcerptKind["EscapedText"] = "EscapedText"; | |
| ExcerptKind["FencedCode_OpeningFence"] = "FencedCode_OpeningFence"; | |
| ExcerptKind["FencedCode_Language"] = "FencedCode_Language"; | |
| ExcerptKind["FencedCode_Code"] = "FencedCode_Code"; | |
| ExcerptKind["FencedCode_ClosingFence"] = "FencedCode_ClosingFence"; | |
| ExcerptKind["HtmlAttribute_Name"] = "HtmlAttribute_Name"; | |
| ExcerptKind["HtmlAttribute_Equals"] = "HtmlAttribute_Equals"; | |
| ExcerptKind["HtmlAttribute_Value"] = "HtmlAttribute_Value"; | |
| ExcerptKind["HtmlEndTag_OpeningDelimiter"] = "HtmlEndTag_OpeningDelimiter"; | |
| ExcerptKind["HtmlEndTag_Name"] = "HtmlEndTag_Name"; | |
| ExcerptKind["HtmlEndTag_ClosingDelimiter"] = "HtmlEndTag_ClosingDelimiter"; | |
| ExcerptKind["HtmlStartTag_OpeningDelimiter"] = "HtmlStartTag_OpeningDelimiter"; | |
| ExcerptKind["HtmlStartTag_Name"] = "HtmlStartTag_Name"; | |
| ExcerptKind["HtmlStartTag_ClosingDelimiter"] = "HtmlStartTag_ClosingDelimiter"; | |
| ExcerptKind["InlineTag_OpeningDelimiter"] = "InlineTag_OpeningDelimiter"; | |
| ExcerptKind["InlineTag_TagName"] = "InlineTag_TagName"; | |
| ExcerptKind["InlineTag_TagContent"] = "InlineTag_TagContent"; | |
| ExcerptKind["InlineTag_ClosingDelimiter"] = "InlineTag_ClosingDelimiter"; | |
| ExcerptKind["LinkTag_UrlDestination"] = "LinkTag_UrlDestination"; | |
| ExcerptKind["LinkTag_Pipe"] = "LinkTag_Pipe"; | |
| ExcerptKind["LinkTag_LinkText"] = "LinkTag_LinkText"; | |
| ExcerptKind["MemberIdentifier_LeftQuote"] = "MemberIdentifier_LeftQuote"; | |
| ExcerptKind["MemberIdentifier_Identifier"] = "MemberIdentifier_Identifier"; | |
| ExcerptKind["MemberIdentifier_RightQuote"] = "MemberIdentifier_RightQuote"; | |
| ExcerptKind["MemberReference_Dot"] = "MemberReference_Dot"; | |
| ExcerptKind["MemberReference_LeftParenthesis"] = "MemberReference_LeftParenthesis"; | |
| ExcerptKind["MemberReference_Colon"] = "MemberReference_Colon"; | |
| ExcerptKind["MemberReference_RightParenthesis"] = "MemberReference_RightParenthesis"; | |
| ExcerptKind["MemberSelector"] = "MemberSelector"; | |
| ExcerptKind["DocMemberSymbol_LeftBracket"] = "DocMemberSymbol_LeftBracket"; | |
| ExcerptKind["DocMemberSymbol_RightBracket"] = "DocMemberSymbol_RightBracket"; | |
| ExcerptKind["ParamBlock_ParameterName"] = "ParamBlock_ParameterName"; | |
| ExcerptKind["ParamBlock_Hyphen"] = "ParamBlock_Hyphen"; | |
| ExcerptKind["PlainText"] = "PlainText"; | |
| ExcerptKind["SoftBreak"] = "SoftBreak"; | |
| })(ExcerptKind || (ExcerptKind = {})); | |
| /** | |
| * Represents a parsed token sequence. | |
| * | |
| * @remarks | |
| * When a `DocNode` is created by parsing a doc comment, it will have `DocExcerpt` child nodes corresponding to | |
| * the parsed syntax elements such as names, keywords, punctuation, and spaces. These excerpts indicate the original | |
| * coordinates of the syntax element, and thus can be used for syntax highlighting and precise error reporting. | |
| * They could also be used to rewrite specific words in a source file (e.g. renaming a parameter) without disturbing | |
| * any other characters in the file. | |
| * | |
| * Every parsed character will correspond to at most one DocExcerpt object. In other words, excerpts never overlap. | |
| * A given excerpt can span multiple comment lines, and it may contain gaps, for example to skip the `*` character | |
| * that starts a new TSDoc comment line. | |
| */ | |
| export class DocExcerpt extends DocNode { | |
| /** | |
| * Don't call this directly. Instead use {@link TSDocParser} | |
| * @internal | |
| */ | |
| constructor(parameters) { | |
| super(parameters); | |
| if (parameters.excerptKind === ExcerptKind.Spacing) { | |
| for (const token of parameters.content.tokens) { | |
| switch (token.kind) { | |
| case TokenKind.Spacing: | |
| case TokenKind.Newline: | |
| case TokenKind.EndOfInput: | |
| break; | |
| default: | |
| throw new Error(`The excerptKind=Spacing but the range contains a non-whitespace token`); | |
| } | |
| } | |
| } | |
| this._excerptKind = parameters.excerptKind; | |
| this._content = parameters.content; | |
| } | |
| /** @override */ | |
| get kind() { | |
| return DocNodeKind.Excerpt; | |
| } | |
| /** | |
| * Indicates the kind of DocExcerpt. | |
| */ | |
| get excerptKind() { | |
| return this._excerptKind; | |
| } | |
| /** | |
| * The input token sequence corresponding to this excerpt. | |
| * @remarks | |
| * Note that a token sequence can span multiple input lines and may contain gaps, for example to skip the `*` | |
| * character that starts a new TSDoc comment line. | |
| */ | |
| get content() { | |
| return this._content; | |
| } | |
| } | |
| //# sourceMappingURL=DocExcerpt.js.map |