UNPKG

prettier-plugin-jsdoc

Version:

Prettier plugin for format comment blocks and convert to standard Match with Visual studio and other IDE which support jsdoc and comments as markdown.

164 lines (163 loc) 5.73 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.defaultOptions = exports.parsers = exports.options = exports.languages = void 0; const parser_1 = require("./parser"); const parser_babel_1 = __importDefault(require("prettier/parser-babel")); const parser_flow_1 = __importDefault(require("prettier/parser-flow")); const parser_typescript_1 = __importDefault(require("prettier/parser-typescript")); const prettier_1 = __importDefault(require("prettier")); const utils_1 = require("./utils"); const options = { jsdocSpaces: { name: "jsdocSpaces", type: "int", category: "jsdoc", default: 1, description: "How many spaces will be used to separate tag elements.", }, jsdocDescriptionWithDot: { name: "jsdocDescriptionWithDot", type: "boolean", category: "jsdoc", default: false, description: "Should dot be inserted at the end of description", }, jsdocDescriptionTag: { name: "jsdocDescriptionTag", type: "boolean", category: "jsdoc", default: false, description: "Should description tag be used", }, jsdocVerticalAlignment: { name: "jsdocVerticalAlignment", type: "boolean", category: "jsdoc", default: false, description: "Should tags, types, names and description be aligned", }, jsdocKeepUnParseAbleExampleIndent: { name: "jsdocKeepUnParseAbleExampleIndent", type: "boolean", category: "jsdoc", default: false, description: "Should unParseAble example (pseudo code or no js code) keep its indentation", }, jsdocSingleLineComment: { name: "jsdocSingleLineComment", type: "boolean", category: "jsdoc", default: true, description: "Should compact single line comment", }, jsdocSeparateReturnsFromParam: { name: "jsdocSeparateReturnsFromParam", type: "boolean", category: "jsdoc", default: false, description: "Add an space between last @param and @returns", }, tsdoc: { name: "tsdoc", type: "boolean", category: "jsdoc", default: false, description: "Should format as tsdoc", }, jsdocPrintWidth: { name: "jsdocPrintWidth", type: "int", category: "jsdoc", default: undefined, description: "If You don't set value to jsdocPrintWidth, the printWidth will be use as jsdocPrintWidth.", }, }; exports.options = options; const defaultOptions = { jsdocSpaces: options.jsdocSpaces.default, jsdocPrintWidth: options.jsdocPrintWidth.default, jsdocDescriptionWithDot: options.jsdocDescriptionWithDot.default, jsdocDescriptionTag: options.jsdocDescriptionTag.default, jsdocVerticalAlignment: options.jsdocVerticalAlignment.default, jsdocKeepUnParseAbleExampleIndent: options.jsdocKeepUnParseAbleExampleIndent .default, jsdocSingleLineComment: options.jsdocSingleLineComment.default, jsdocSeparateReturnsFromParam: options.jsdocSeparateReturnsFromParam .default, tsdoc: options.tsdoc.default, }; exports.defaultOptions = defaultOptions; const languages = prettier_1.default .getSupportInfo() .languages.filter(({ name }) => [ "JavaScript", "Flow", "JSX", "TSX", "TypeScript", "Markdown", "MDX", ].includes(name)); exports.languages = languages; const parsers = { // JS - Babel get babel() { const parser = parser_babel_1.default.parsers.babel; return mergeParsers(parser, "babel"); }, get "babel-flow"() { const parser = parser_babel_1.default.parsers["babel-flow"]; return mergeParsers(parser, "babel-flow"); }, get "babel-ts"() { const parser = parser_babel_1.default.parsers["babel-ts"]; return mergeParsers(parser, "babel-ts"); }, // JS - Flow get flow() { const parser = parser_flow_1.default.parsers.flow; return mergeParsers(parser, "flow"); }, // JS - TypeScript get typescript() { const parser = parser_typescript_1.default.parsers.typescript; return mergeParsers(parser, "typescript"); // require("./parser-typescript").parsers.typescript; }, get "jsdoc-parser"() { // Backward compatible, don't use this in new version since 1.0.0 const parser = parser_babel_1.default.parsers["babel-ts"]; return mergeParsers(parser, "babel-ts"); }, }; exports.parsers = parsers; function mergeParsers(originalParser, parserName) { const jsDocParse = parser_1.getParser(originalParser.parse, parserName); const jsDocPreprocess = (text, options) => { const tsPluginParser = utils_1.findPluginByParser(parserName, options); if (!tsPluginParser) { return originalParser.preprocess ? // eslint-disable-next-line @typescript-eslint/ban-ts-comment //@ts-ignore originalParser.preprocess(text, options) : text; } const preprocess = tsPluginParser.preprocess || originalParser.preprocess; Object.assign(parser, { ...parser, ...tsPluginParser, preprocess: jsDocPreprocess, parse: jsDocParse, }); return preprocess ? preprocess(text, options) : text; }; const parser = { ...originalParser, preprocess: jsDocPreprocess, parse: jsDocParse, }; return parser; }