
Security News
CVE Volume Surges Past 48,000 in 2025 as WordPress Plugin Ecosystem Drives Growth
CVE disclosures hit a record 48,185 in 2025, driven largely by vulnerabilities in third-party WordPress plugins.
@es-joy/jsdoccomment
Advanced tools
Maintained replacement for ESLint's deprecated SourceCode#getJSDocComment along with other jsdoc utilities
See the Demo.
This project aims to preserve and expand upon the
SourceCode#getJSDocComment functionality of the deprecated ESLint method.
It also exports a number of functions currently for working with JSDoc:
parseCommentFor parsing comment-parser in a JSDoc-specific manner.
Might wish to have tags with or without tags, etc. derived from a split off
JSON file.
commentParserToESTreeConverts comment-parser AST to ESTree/ESLint/Babel friendly AST. See the "ESLint AST..." section below.
estreeToStringStringifies. In addition to the node argument, it accepts an optional second
options object with a single preferRawType key. If you don't need to modify
JSDoc type AST, you might wish to set this to true to get the benefits of
preserving the raw form, but for AST-based stringification of JSDoc types,
keep it false (the default).
jsdocVisitorKeysThe VisitorKeys
for JsdocBlock, JsdocDescriptionLine, and JsdocTag. More likely to be
subject to change or dropped in favor of another type parser.
jsdocTypeVisitorKeysJust a re-export of VisitorKeys
from jsdoc-type-pratt-parser.
getDefaultTagStructureForModeProvides info on JSDoc tags:
nameContents ('namepath-referencing'|'namepath-defining'|
'dual-namepath-referencing'|false) - Whether and how a name is allowed
following any type. Tags without a proper name (value false) may still
have a description (which can appear like a name); descriptionAllowed
in such cases would be true.
The presence of a truthy nameContents value is therefore only intended
to signify whether separate parsing should occur for a name vs. a
description, and what its nature should be.nameRequired (boolean) - Whether a name must be present following any type.descriptionAllowed (boolean) - Whether a description (following any name)
is allowed.typeAllowed (boolean) - Whether the tag accepts a curly bracketed portion.
Even without a type, a tag may still have a name and/or description.typeRequired (boolean) - Whether a curly bracketed type must be present.typeOrNameRequired (boolean) - Whether either a curly bracketed type is
required or a name, but not necessarily both.Also currently exports these utilities:
getTokenizers - Used with parseComment (its main core).hasSeeWithLink - A utility to detect if a tag is @see and has a @link.commentHandler - Used by eslint-plugin-jsdoc.commentParserToESTree- Converts comment-parser
AST to ESTree/ESLint/Babel friendly AST.jsdocVisitorKeys - The VisitorKeys
for JSDocBlock, JSDocDescriptionLine, and JSDocTag.jsdocTypeVisitorKeys - VisitorKeys
for jsdoc-type-pratt-parser.defaultNoTypes = The tags which allow no types by default:
default, defaultvalue, description, example, file,
fileoverview, license, overview, see, summarydefaultNoNames - The tags which allow no names by default:
access, author, default, defaultvalue, description, example,
exception, file, fileoverview, kind, license, overview,
return, returns, since, summary, throws, version, variationcomment-parser nodes (JsdocBlock, JsdocTag, and JsdocDescriptionLine)Note: Although not added in this package, @es-joy/jsdoc-eslint-parser adds
a jsdoc property to other ES nodes (using this project's getJSDocComment
to determine the specific comment-block that will be attached as AST).
JsdocBlockHas the following visitable properties:
descriptionLines (an array of JsdocDescriptionLine for multiline
descriptions).tags (an array of JsdocTag; see below)inlineTags (an array of JsdocInlineTag; see below)Has the following custom non-visitable property:
delimiterLineBreak - A string containing any line break after delimiter.lastDescriptionLine - A numberendLine - A number representing the line number with end/terminaldescriptionStartLine - A 0+ number indicating the line where any
description beginsdescriptionEndLine - A 0+ number indicating the line where the description
endshasPreterminalDescription - Set to 0 or 1. On if has a block description
on the same line as the terminal */.hasPreterminalTagDescription - Set to 0 or 1. On if has a tag description
on the same line as the terminal */.preterminalLineBreak - A string containing any line break before terminal.May also have the following non-visitable properties from comment-parser:
description - Same as descriptionLines but as a string with newlines.delimiterpostDelimiterlineEndinitial (from start)terminal (from end)JsdocTagHas the following visitable properties:
parsedType (the jsdoc-type-pratt-parser AST representation of the tag's
type (see the jsdoc-type-pratt-parser section below)).typeLines (an array of JsdocTypeLine for multiline type strings)descriptionLines (an array of JsdocDescriptionLine for multiline
descriptions)inlineTags (an array of JsdocInlineTag)May also have the following non-visitable properties from comment-parser
(note that all are included from comment-parser except end as that is only
for JSDoc blocks and note that type is renamed to rawType and start to
initial):
description - Same as descriptionLines but as a string with newlines.rawType - comment-parser has this named as type, but because of a
conflict with ESTree using type for Node type, we renamed it to
rawType. It is otherwise the same as in comment-parser, i.e., a string
with newlines, though with the initial { and final } stripped out.
See typeLines for the array version of this property.initial - Renamed from start to avoid potential conflicts with
Acorn-style parser processing toolsdelimiterpostDelimitertag (this does differ from comment-parser now in terms of our stripping
the initial @)postTagnamepostNamepostTypeJsdocDescriptionLineNo visitable properties.
May also have the following non-visitable properties from comment-parser:
delimiterpostDelimiterinitial (from start)descriptionJsdocTypeLineNo visitable properties.
May also have the following non-visitable properties from comment-parser:
delimiterpostDelimiterinitial (from start)rawType - Renamed from comment-parser to avoid a conflict. See
explanation under JsdocTagJsdocInlineTagNo visitable properties.
Has the following non-visitable properties:
format: 'pipe' | 'plain' | 'prefix' | 'space'. These follow the styles of link or tutorial.
pipe: {@link namepathOrURL|link text}plain: {@link namepathOrURL}prefix: [link text]{@link namepathOrURL}space: {@link namepathOrURL link text (after the first space)}namepathOrURL: stringtag: string. The standard allows tutorial or linktext: stringjsdoc-type-pratt-parserThe AST, including type, remains as is from jsdoc-type-pratt-parser.
The type will always begin with a JsdocType prefix added, along with a
camel-cased type name, e.g., JsdocTypeUnion.
The jsdoc-type-pratt-parser visitor keys are also preserved without change.
You can get a sense of the structure of these types using the parser's tester.
npm i @es-joy/jsdoccomment
The changelog can be found on the CHANGES.md.
Brett Zamir and contributors.
MIT License, see the included LICENSE-MIT.txt file.
esquery expects a right property to search for > (the
child selector), we should perhaps insist, for example, that params are
the child property for JsdocBlock or such. Where :has() is currently
needed, one could thus instead just use >.trailing for JsdocBlock to know whether it is followed by a
line break or what not; comment-parser does not provide, howeverindent argument (challenging for
eslint-plugin-jsdoc but needed for jsdoc-eslint-parser stringifiers
to be more faithful); should also then use the proposed trailing as wellFAQs
Maintained replacement for ESLint's deprecated SourceCode#getJSDocComment along with other jsdoc utilities
The npm package @es-joy/jsdoccomment receives a total of 1,820,162 weekly downloads. As such, @es-joy/jsdoccomment popularity was classified as popular.
We found that @es-joy/jsdoccomment demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
CVE disclosures hit a record 48,185 in 2025, driven largely by vulnerabilities in third-party WordPress plugins.

Security News
Socket CEO Feross Aboukhadijeh joins Insecure Agents to discuss CVE remediation and why supply chain attacks require a different security approach.

Security News
Tailwind Labs laid off 75% of its engineering team after revenue dropped 80%, as LLMs redirect traffic away from documentation where developers discover paid products.