@vuedoc/parser
Version:
Generate a JSON documentation for a Vue file
150 lines • 4.94 kB
JavaScript
import { AbstractParser } from './AbstractParser.js';
import { CommentParser } from './CommentParser.js';
import { Syntax, Visibility } from '../lib/Enum.js';
export class AbstractExpressionParser extends AbstractParser {
getSourceString(node) {
const source = super.getSourceString(node);
switch (node.type) {
case Syntax.MemberExpression:
if (node.object.type === Syntax.Identifier) {
if (node.object.name === 'Symbol') {
return `[${source}]`;
}
}
break;
}
return source;
}
getRawValue(key, defaultValue) {
const ref = this.getScopeValue(key);
return ref?.composition && 'returningValue' in ref.composition
? ref.composition.returningValue
: defaultValue;
}
parse(node) {
switch (node.type) {
case Syntax.BlockStatement:
this.parseBlockStatement(node);
break;
default:
super.parse(node);
break;
}
}
parseEntryComment(entry, node, defaultVisibility = Visibility.public) {
const comment = this.root.findComment(node);
if (comment) {
const parsedComment = CommentParser.parse(comment, defaultVisibility);
Object.assign(entry, parsedComment);
}
else {
entry.visibility = defaultVisibility;
}
if (!entry.description) {
delete entry.description;
}
return comment;
}
parseSpreadElement(node) {
this.parse(node.argument);
}
parseObjectExpression(node) {
node.properties.forEach((property) => {
switch (property.type) {
case Syntax.SpreadElement:
this.parseSpreadElement(property);
break;
default:
this.parseObjectExpressionProperty(property);
break;
}
});
}
/* istanbul ignore next */
/* eslint-disable no-unused-vars */
/* eslint-disable class-methods-use-this */
parseObjectExpressionProperty(_node) { }
parseBlockStatement(node) {
for (const item of node.body) {
this.parseBlockStatementItem(item);
}
}
parseBlockStatementItem(item) {
switch (item.type) {
case Syntax.VariableDeclaration:
this.parseVariableDeclaration(item);
break;
case Syntax.ExpressionStatement:
this.parseExpressionStatement(item);
break;
case Syntax.IfStatement:
this.parseConsequentStatement(item.consequent);
if (item.alternate) {
this.parseAlternameStatement(item.alternate);
}
break;
case Syntax.ForStatement:
case Syntax.ForInStatement:
case Syntax.ForOfStatement:
case Syntax.WhileStatement:
case Syntax.DoWhileStatement:
this.parseLoopStatement(item);
break;
case Syntax.SwitchStatement:
this.parseSwitchStatement(item);
break;
case Syntax.TryStatement:
this.parseTryStatement(item);
break;
}
}
parseConsequentStatement(node) {
switch (node.type) {
case Syntax.BlockStatement:
this.parseBlockStatement(node);
break;
case Syntax.ExpressionStatement:
this.parseExpressionStatement(node);
break;
}
}
parseAlternameStatement(node) {
this.parseConsequentStatement(node);
}
parseLoopStatement(node) {
switch (node.body.type) {
case Syntax.BlockStatement:
this.parseBlockStatement(node.body);
break;
}
}
parseSwitchStatement(node) {
for (const caseNode of node.cases) {
for (const consequent of caseNode.consequent) {
if ('test' in consequent) {
this.parseConsequentStatement(consequent);
}
else {
this.parseAlternameStatement(consequent);
}
}
}
}
parseTryStatement(node) {
this.parseBlockStatement(node.block);
if (node.handler) {
this.parseBlockStatement(node.handler.body);
}
if (node.finalizer) {
this.parseBlockStatement(node.finalizer);
}
}
parseFunctionExpression(node) {
switch (node.type) {
case Syntax.BlockStatement:
this.parseBlockStatement(node);
break;
}
}
}
//# sourceMappingURL=AbstractExpressionParser.js.map