Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
console.log(os.EOL + colors.green('Comment to be parsed:') + os.EOL);
console.log(colors.gray('<<<<<<'));
console.log(foundComment.textRange.toString());
console.log(colors.gray('>>>>>>'));
const customConfiguration: tsdoc.TSDocConfiguration = new tsdoc.TSDocConfiguration();
const customInlineDefinition: tsdoc.TSDocTagDefinition = new tsdoc.TSDocTagDefinition({
tagName: '@customInline',
syntaxKind: tsdoc.TSDocTagSyntaxKind.InlineTag,
allowMultiple: true
});
// NOTE: Defining this causes a new DocBlock to be created under docComment.customBlocks.
// Otherwise, a simple DocBlockTag would appear inline in the @remarks section.
const customBlockDefinition: tsdoc.TSDocTagDefinition = new tsdoc.TSDocTagDefinition({
tagName: '@customBlock',
syntaxKind: tsdoc.TSDocTagSyntaxKind.BlockTag
});
// NOTE: Defining this causes @customModifier to be removed from its section,
// and added to the docComment.modifierTagSet
const customModifierDefinition: tsdoc.TSDocTagDefinition = new tsdoc.TSDocTagDefinition({
tagName: '@customModifier',
syntaxKind: tsdoc.TSDocTagSyntaxKind.ModifierTag
});
customConfiguration.addTagDefinitions([
customInlineDefinition,
customBlockDefinition,
customModifierDefinition
]);
private _writeApiItemPage(apiItem: ApiItem): void {
const configuration: TSDocConfiguration = this._tsdocConfiguration;
const output: DocSection = new DocSection({ configuration: this._tsdocConfiguration });
this._writeHeaderSection(output, apiItem);
this._writeBreadcrumb(output, apiItem);
const scopedName: string = apiItem.getScopedNameWithinPackage();
// console.log(scopedName);
switch (apiItem.kind) {
case ApiItemKind.Class:
output.appendNode(new DocHeading({ configuration, title: `${scopedName} class` }));
break;
case ApiItemKind.Enum:
output.appendNode(new DocHeading({ configuration, title: `${scopedName} enum` }));
break;
case ApiItemKind.Interface:
output.appendNode(new DocHeading({ configuration, title: `${scopedName} interface` }));
break;
export function simpleDemo(): void {
console.log(colors.yellow('*** TSDoc API demo: Simple Scenario ***') + os.EOL);
const inputFilename: string = path.resolve(path.join(__dirname, '..', 'assets', 'simple-input.ts'));
console.log('Reading assets/simple-input.ts...');
const inputBuffer: string = fs.readFileSync(inputFilename).toString();
// NOTE: Optionally, can provide a TSDocParserConfiguration here
const tsdocParser: TSDocParser = new TSDocParser();
const parserContext: ParserContext = tsdocParser.parseString(inputBuffer);
console.log(os.EOL + colors.green('Input Buffer:') + os.EOL);
console.log(colors.gray('<<<<<<'));
console.log(inputBuffer);
console.log(colors.gray('>>>>>>'));
console.log(os.EOL + colors.green('Extracted Lines:') + os.EOL);
console.log(JSON.stringify(parserContext.lines.map(x => x.toString()), undefined, ' '));
console.log(os.EOL + colors.green('Parser Log Messages:') + os.EOL);
if (parserContext.log.messages.length === 0) {
console.log('No errors or warnings.');
} else {
for (const message of parserContext.log.messages) {
import * as colors from 'colors';
import * as fs from 'fs';
import * as path from 'path';
import * as os from 'os';
import { TSDocParser, ParserContext, DocComment } from '@microsoft/tsdoc';
import { Formatter } from './Formatter';
console.log(colors.cyan('*** TSDoc API demo ***') + os.EOL);
const inputFilename: string = path.resolve(path.join(__dirname, '..', 'assets', 'demo-input.ts'));
console.log('Reading assets/demo-input.ts...');
const inputBuffer: string = fs.readFileSync(inputFilename).toString();
// NOTE: Optionally, can provide a TSDocParserConfiguration here
const tsdocParser: TSDocParser = new TSDocParser();
const parserContext: ParserContext = tsdocParser.parseString(inputBuffer);
console.log(os.EOL + colors.green('Input Buffer:') + os.EOL);
console.log(colors.gray('<<<<<<'));
console.log(inputBuffer);
console.log(colors.gray('>>>>>>'));
console.log(os.EOL + colors.green('Extracted Lines:') + os.EOL);
console.log(JSON.stringify(parserContext.lines.map(x => x.toString()), undefined, ' '));
console.log(os.EOL + colors.green('Parser Log Messages:') + os.EOL);
if (parserContext.log.messages.length === 0) {
console.log('No errors or warnings.');
} else {
for (const message of parserContext.log.messages.map(x => x.toString())) {
// NOTE: Defining this causes @customModifier to be removed from its section,
// and added to the docComment.modifierTagSet
const customModifierDefinition: tsdoc.TSDocTagDefinition = new tsdoc.TSDocTagDefinition({
tagName: '@customModifier',
syntaxKind: tsdoc.TSDocTagSyntaxKind.ModifierTag
});
customConfiguration.addTagDefinitions([
customInlineDefinition,
customBlockDefinition,
customModifierDefinition
]);
console.log(os.EOL + 'Invoking TSDocParser with custom configuration...' + os.EOL);
const tsdocParser: tsdoc.TSDocParser = new tsdoc.TSDocParser(customConfiguration);
const parserContext: tsdoc.ParserContext = tsdocParser.parseRange(foundComment.textRange);
const docComment: tsdoc.DocComment = parserContext.docComment;
console.log(os.EOL + colors.green('Parser Log Messages:') + os.EOL);
if (parserContext.log.messages.length === 0) {
console.log('No errors or warnings.');
} else {
const sourceFile: ts.SourceFile = foundComment.compilerNode.getSourceFile();
for (const message of parserContext.log.messages) {
// Since we have the compiler's analysis, use it to calculate the line/column information,
// since this is currently faster than TSDoc's TextRange.getLocation() lookup.
const location: ts.LineAndCharacter = sourceFile.getLineAndCharacterOfPosition(message.textRange.pos);
const formattedMessage: string = `${sourceFile.fileName}(${location.line + 1},${location.character + 1}):`
+ ` [TSDoc] ${message}`;
console.log(formattedMessage);
function parseTSDoc(foundComment: IFoundComment): void {
console.log(os.EOL + colors.green('Comment to be parsed:') + os.EOL);
console.log(colors.gray('<<<<<<'));
console.log(foundComment.textRange.toString());
console.log(colors.gray('>>>>>>'));
const customConfiguration: tsdoc.TSDocConfiguration = new tsdoc.TSDocConfiguration();
const customInlineDefinition: tsdoc.TSDocTagDefinition = new tsdoc.TSDocTagDefinition({
tagName: '@customInline',
syntaxKind: tsdoc.TSDocTagSyntaxKind.InlineTag,
allowMultiple: true
});
// NOTE: Defining this causes a new DocBlock to be created under docComment.customBlocks.
// Otherwise, a simple DocBlockTag would appear inline in the @remarks section.
const customBlockDefinition: tsdoc.TSDocTagDefinition = new tsdoc.TSDocTagDefinition({
tagName: '@customBlock',
syntaxKind: tsdoc.TSDocTagSyntaxKind.BlockTag
});
// NOTE: Defining this causes @customModifier to be removed from its section,
// and added to the docComment.modifierTagSet
private _renderMarkdown(docSection: DocSection, contextApiItem: ApiItem): string {
const stringBuilder: StringBuilder = new StringBuilder();
this._markdownEmitter.emit(stringBuilder, docSection, {
contextApiItem,
onGetFilenameForApiItem: (apiItem: ApiItem) => {
// NOTE: GitHub's markdown renderer does not resolve relative hyperlinks correctly
// unless they start with "./" or "../".
return `xref:${this._getUid(apiItem)}`;
}
});
return stringBuilder.toString().trim();
}
case ApiItemKind.PropertySignature:
break;
case ApiItemKind.TypeAlias:
break;
case ApiItemKind.Variable:
break;
default:
throw new Error('Unsupported API item kind: ' + apiItem.kind);
}
if (appendRemarks) {
this._writeRemarksSection(output, apiItem);
}
const filename: string = path.join(this._outputFolder, this._getFilenameForApiItem(apiItem));
const stringBuilder: StringBuilder = new StringBuilder();
stringBuilder.append('\n\n');
this._markdownEmitter.emit(stringBuilder, output, {
contextApiItem: apiItem,
onGetFilenameForApiItem: (apiItemForFilename: ApiItem) => {
return this._getLinkFilenameForApiItem(apiItemForFilename);
}
});
let pageContent: string = stringBuilder.toString();
if (this._pluginLoader.markdownDocumenterFeature) {
// Allow the plugin to customize the pageContent
const eventArgs: IMarkdownDocumenterFeatureOnBeforeWritePageArgs = {
apiItem: apiItem,
function parseTSDoc(foundComment: IFoundComment): void {
console.log(os.EOL + colors.green('Comment to be parsed:') + os.EOL);
console.log(colors.gray('<<<<<<'));
console.log(foundComment.textRange.toString());
console.log(colors.gray('>>>>>>'));
const customConfiguration: tsdoc.TSDocConfiguration = new tsdoc.TSDocConfiguration();
const customInlineDefinition: tsdoc.TSDocTagDefinition = new tsdoc.TSDocTagDefinition({
tagName: '@customInline',
syntaxKind: tsdoc.TSDocTagSyntaxKind.InlineTag,
allowMultiple: true
});
// NOTE: Defining this causes a new DocBlock to be created under docComment.customBlocks.
// Otherwise, a simple DocBlockTag would appear inline in the @remarks section.
const customBlockDefinition: tsdoc.TSDocTagDefinition = new tsdoc.TSDocTagDefinition({
tagName: '@customBlock',
syntaxKind: tsdoc.TSDocTagSyntaxKind.BlockTag
});
// NOTE: Defining this causes @customModifier to be removed from its section,
// and added to the docComment.modifierTagSet
const customModifierDefinition: tsdoc.TSDocTagDefinition = new tsdoc.TSDocTagDefinition({
tagName: '@customModifier',
syntaxKind: tsdoc.TSDocTagSyntaxKind.ModifierTag
});
syntaxKind: tsdoc.TSDocTagSyntaxKind.InlineTag,
allowMultiple: true
});
// NOTE: Defining this causes a new DocBlock to be created under docComment.customBlocks.
// Otherwise, a simple DocBlockTag would appear inline in the @remarks section.
const customBlockDefinition: tsdoc.TSDocTagDefinition = new tsdoc.TSDocTagDefinition({
tagName: '@customBlock',
syntaxKind: tsdoc.TSDocTagSyntaxKind.BlockTag
});
// NOTE: Defining this causes @customModifier to be removed from its section,
// and added to the docComment.modifierTagSet
const customModifierDefinition: tsdoc.TSDocTagDefinition = new tsdoc.TSDocTagDefinition({
tagName: '@customModifier',
syntaxKind: tsdoc.TSDocTagSyntaxKind.ModifierTag
});
customConfiguration.addTagDefinitions([
customInlineDefinition,
customBlockDefinition,
customModifierDefinition
]);
console.log(os.EOL + 'Invoking TSDocParser with custom configuration...' + os.EOL);
const tsdocParser: tsdoc.TSDocParser = new tsdoc.TSDocParser(customConfiguration);
const parserContext: tsdoc.ParserContext = tsdocParser.parseRange(foundComment.textRange);
const docComment: tsdoc.DocComment = parserContext.docComment;
console.log(os.EOL + colors.green('Parser Log Messages:') + os.EOL);
if (parserContext.log.messages.length === 0) {