153 lines
7.4 KiB
JavaScript
153 lines
7.4 KiB
JavaScript
|
"use strict";
|
||
|
var __extends = (this && this.__extends) || (function () {
|
||
|
var extendStatics = function (d, b) {
|
||
|
extendStatics = Object.setPrototypeOf ||
|
||
|
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
||
|
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
|
||
|
return extendStatics(d, b);
|
||
|
};
|
||
|
return function (d, b) {
|
||
|
extendStatics(d, b);
|
||
|
function __() { this.constructor = d; }
|
||
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||
|
};
|
||
|
})();
|
||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||
|
exports.DocExcerpt = exports.ExcerptKind = void 0;
|
||
|
var DocNode_1 = require("./DocNode");
|
||
|
var Token_1 = require("../parser/Token");
|
||
|
/* eslint-disable @typescript-eslint/naming-convention */
|
||
|
/**
|
||
|
* Indicates the type of {@link DocExcerpt}.
|
||
|
*/
|
||
|
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 = exports.ExcerptKind || (exports.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.
|
||
|
*/
|
||
|
var DocExcerpt = /** @class */ (function (_super) {
|
||
|
__extends(DocExcerpt, _super);
|
||
|
/**
|
||
|
* Don't call this directly. Instead use {@link TSDocParser}
|
||
|
* @internal
|
||
|
*/
|
||
|
function DocExcerpt(parameters) {
|
||
|
var _this = _super.call(this, parameters) || this;
|
||
|
if (parameters.excerptKind === ExcerptKind.Spacing) {
|
||
|
for (var _i = 0, _a = parameters.content.tokens; _i < _a.length; _i++) {
|
||
|
var token = _a[_i];
|
||
|
switch (token.kind) {
|
||
|
case Token_1.TokenKind.Spacing:
|
||
|
case Token_1.TokenKind.Newline:
|
||
|
case Token_1.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;
|
||
|
return _this;
|
||
|
}
|
||
|
Object.defineProperty(DocExcerpt.prototype, "kind", {
|
||
|
/** @override */
|
||
|
get: function () {
|
||
|
return DocNode_1.DocNodeKind.Excerpt;
|
||
|
},
|
||
|
enumerable: false,
|
||
|
configurable: true
|
||
|
});
|
||
|
Object.defineProperty(DocExcerpt.prototype, "excerptKind", {
|
||
|
/**
|
||
|
* Indicates the kind of DocExcerpt.
|
||
|
*/
|
||
|
get: function () {
|
||
|
return this._excerptKind;
|
||
|
},
|
||
|
enumerable: false,
|
||
|
configurable: true
|
||
|
});
|
||
|
Object.defineProperty(DocExcerpt.prototype, "content", {
|
||
|
/**
|
||
|
* 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: function () {
|
||
|
return this._content;
|
||
|
},
|
||
|
enumerable: false,
|
||
|
configurable: true
|
||
|
});
|
||
|
return DocExcerpt;
|
||
|
}(DocNode_1.DocNode));
|
||
|
exports.DocExcerpt = DocExcerpt;
|
||
|
//# sourceMappingURL=DocExcerpt.js.map
|