UNPKG

jsdoc-type-pratt-parser

Version:

[![Npm Package](https://badgen.net/npm/v/jsdoc-type-pratt-parser)](https://www.npmjs.com/package/jsdoc-type-pratt-parser) [![Test Status](https://github.com/jsdoc-type-pratt-parser/jsdoc-type-pratt-parser/actions/workflows/test.yml/badge.svg?branch=main)]

142 lines (136 loc) 4.72 kB
import { assertsParslet } from '../parslets/assertsParslet.js' import { baseGrammar } from './baseGrammar.js' import type { Grammar } from './Grammar.js' import { pathGrammar } from './pathGrammar.js' import { createNameParslet } from '../parslets/NameParslet.js' import { nullableParslet } from '../parslets/NullableParslets.js' import { optionalParslet } from '../parslets/OptionalParslet.js' import { stringValueParslet } from '../parslets/StringValueParslet.js' import { numberParslet } from '../parslets/NumberParslet.js' import { createFunctionParslet } from '../parslets/FunctionParslet.js' import { createObjectParslet } from '../parslets/ObjectParslet.js' import { functionPropertyParslet } from '../parslets/FunctionPropertyParslet.js' import { createTupleParslet } from '../parslets/TupleParslet.js' import { createVariadicParslet } from '../parslets/VariadicParslet.js' import { typeOfParslet } from '../parslets/TypeOfParslet.js' import { keyOfParslet } from '../parslets/KeyOfParslet.js' import { importParslet } from '../parslets/ImportParslet.js' import { createSpecialNamePathParslet } from '../parslets/SpecialNamePathParslet.js' import { readonlyPropertyParslet } from '../parslets/ReadonlyPropertyParslet.js' import { arrayBracketsParslet } from '../parslets/ArrayBracketsParslet.js' import { arrowFunctionParslet } from '../parslets/ArrowFunctionParslet.js' import { genericArrowFunctionParslet } from '../parslets/GenericArrowFunctionParslet.js' import { createNamePathParslet } from '../parslets/NamePathParslet.js' import { intersectionParslet } from '../parslets/IntersectionParslet.js' import { predicateParslet } from '../parslets/predicateParslet.js' import { createObjectFieldParslet } from '../parslets/ObjectFieldParslet.js' import { createKeyValueParslet } from '../parslets/KeyValueParslet.js' import { objectSquaredPropertyParslet } from '../parslets/ObjectSquaredPropertyParslet.js' import { readonlyArrayParslet } from '../parslets/ReadonlyArrayParslet.js' import { conditionalParslet } from '../parslets/ConditionalParslet.js' import { templateLiteralParslet } from '../parslets/TemplateLiteralParslet.js' import { genericParslet } from '../parslets/GenericParslet.js' import { baseNameTokens } from '../lexer/Token.js' const objectFieldGrammar: Grammar = [ functionPropertyParslet, readonlyPropertyParslet, createNameParslet({ allowedAdditionalTokens: baseNameTokens }), nullableParslet, optionalParslet, stringValueParslet, numberParslet, createObjectFieldParslet({ allowSquaredProperties: true, allowKeyTypes: false, allowOptional: true, allowReadonly: true }), objectSquaredPropertyParslet ] export const typescriptGrammar: Grammar = [ ...baseGrammar, createObjectParslet({ allowKeyTypes: false, objectFieldGrammar, signatureGrammar: [ createKeyValueParslet({ allowVariadic: true, allowOptional: true, acceptParameterList: true, }) ] }), readonlyArrayParslet, typeOfParslet, keyOfParslet, importParslet, stringValueParslet, createFunctionParslet({ allowWithoutParenthesis: true, allowNoReturnType: true, allowNamedParameters: ['this', 'new', 'args'], allowNewAsFunctionKeyword: true }), createTupleParslet({ allowQuestionMark: false }), createVariadicParslet({ allowEnclosingBrackets: false, allowPostfix: false }), assertsParslet, conditionalParslet, createNameParslet({ allowedAdditionalTokens: ['event', 'external', 'in'] }), createSpecialNamePathParslet({ allowedTypes: ['module'], pathGrammar }), arrayBracketsParslet, arrowFunctionParslet, genericArrowFunctionParslet, createNamePathParslet({ allowSquareBracketsOnAnyType: true, allowJsdocNamePaths: false, pathGrammar }), intersectionParslet, predicateParslet, templateLiteralParslet, createKeyValueParslet({ allowVariadic: true, allowOptional: true }) ] export const typescriptNameGrammar = [ genericParslet, arrayBracketsParslet, createNameParslet({ allowedAdditionalTokens: baseNameTokens }) ] export const typescriptNamePathGrammar = [ genericParslet, arrayBracketsParslet, createNameParslet({ allowedAdditionalTokens: baseNameTokens }), createNamePathParslet({ allowSquareBracketsOnAnyType: true, // Here we actually want JSDoc name paths (even though TS // in JSDoc namepath positions interpret them differently // than JSDoc) allowJsdocNamePaths: true, pathGrammar }) ] export const typescriptNamePathSpecialGrammar = [ createSpecialNamePathParslet({ allowedTypes: ['module'], pathGrammar }), ...typescriptNamePathGrammar ]