doctrine vs jsdoc vs acorn vs esprima
JavaScript Parsing and Documentation Tools
doctrinejsdocacornesprimaSimilar Packages:

JavaScript Parsing and Documentation Tools

These packages serve distinct purposes in the JavaScript ecosystem, focusing on parsing, analyzing, and documenting JavaScript code. Acorn is a fast, lightweight JavaScript parser that can handle ECMAScript 6 and beyond, making it ideal for building tools that require syntax analysis. Doctrine is a library for parsing JSDoc comments, enabling developers to extract and manipulate documentation metadata from their code. Esprima is a high-performance, standard-compliant JavaScript parser that generates an abstract syntax tree (AST) for further analysis, making it suitable for static code analysis and transformation tools. JSDoc is a documentation generator that converts comments in your JavaScript code into HTML documentation, enhancing code maintainability and usability.

Npm Package Weekly Downloads Trend

3 Years

Github Stars Ranking

Stat Detail

Package
Downloads
Stars
Size
Issues
Publish
License
doctrine96,891,246459-07 years agoApache-2.0
jsdoc2,854,48015,4211.47 MB4545 months agoApache-2.0
acorn011,334559 kB1519 days agoMIT
esprima07,133-1498 years agoBSD-2-Clause

Feature Comparison: doctrine vs jsdoc vs acorn vs esprima

Parsing Capability

  • doctrine:

    Doctrine focuses specifically on parsing JSDoc comments, allowing developers to extract structured information from documentation comments seamlessly. It does not parse JavaScript code itself but rather the comments associated with it.

  • jsdoc:

    JSDoc does not parse JavaScript code but rather processes comments within the code to generate documentation. It transforms JSDoc comments into well-structured HTML documentation, focusing on usability and clarity.

  • acorn:

    Acorn is designed for speed and efficiency, providing a minimalistic approach to parsing JavaScript code. It supports the latest ECMAScript features, making it suitable for modern JavaScript applications and tools.

  • esprima:

    Esprima is a full-fledged JavaScript parser that adheres to the ECMAScript standards. It generates a detailed abstract syntax tree (AST), making it ideal for tools that require in-depth analysis of JavaScript code structures.

Performance

  • doctrine:

    Doctrine is lightweight and efficient for parsing JSDoc comments, but its performance is contingent on the complexity of the comments being parsed rather than the JavaScript code itself.

  • jsdoc:

    JSDoc's performance is primarily dependent on the size of the codebase and the complexity of the comments. It efficiently generates documentation but may take longer with extensive comments.

  • acorn:

    Acorn is known for its high performance and low memory usage, making it suitable for applications that require fast parsing of large JavaScript files or real-time analysis.

  • esprima:

    Esprima is optimized for performance and can handle large codebases effectively. However, it may not be as fast as Acorn due to its comprehensive parsing capabilities.

Use Cases

  • doctrine:

    Best suited for projects that heavily utilize JSDoc for documentation, Doctrine allows developers to extract and manipulate documentation metadata for better code understanding and maintenance.

  • jsdoc:

    JSDoc is specifically designed for generating documentation from JavaScript code comments, making it essential for projects that prioritize maintainable and user-friendly documentation.

  • acorn:

    Ideal for building tools that require fast parsing, such as linters, compilers, or code transformation utilities, Acorn is versatile for various JavaScript tooling needs.

  • esprima:

    Esprima is perfect for static analysis tools, code transformation utilities, and any application that requires a detailed understanding of JavaScript code structure through AST generation.

Community and Support

  • doctrine:

    Doctrine is less commonly used compared to other libraries but is well-supported within the context of JSDoc. It benefits from the larger JSDoc community for documentation-related queries.

  • jsdoc:

    JSDoc has a large user base and extensive documentation, providing ample resources for developers looking to implement documentation generation in their projects.

  • acorn:

    Acorn has a strong community and is widely used in various JavaScript tools, ensuring good support and regular updates. Its simplicity makes it easy to integrate into projects.

  • esprima:

    Esprima has a robust community and is frequently updated to align with the latest ECMAScript standards, making it a reliable choice for developers needing a compliant parser.

Extensibility

  • doctrine:

    Doctrine is focused on JSDoc parsing and does not offer extensive extensibility options, but it can be integrated into larger documentation workflows.

  • jsdoc:

    JSDoc supports plugins and custom templates, enabling developers to extend its functionality and tailor the generated documentation to meet specific project requirements.

  • acorn:

    Acorn is designed to be extensible, allowing developers to create custom plugins and features tailored to specific parsing needs, enhancing its functionality.

  • esprima:

    Esprima can be extended through its AST, allowing developers to build custom analysis tools or transformations based on the generated syntax tree.

How to Choose: doctrine vs jsdoc vs acorn vs esprima

  • doctrine:

    Opt for Doctrine when you need to parse JSDoc comments specifically, allowing you to extract and utilize documentation metadata effectively in your projects.

  • jsdoc:

    Use JSDoc if your primary goal is to generate documentation from your JavaScript code comments, providing a straightforward way to create user-friendly documentation.

  • acorn:

    Choose Acorn if you need a fast and efficient JavaScript parser that supports modern ECMAScript features and is lightweight for building custom tools or compilers.

  • esprima:

    Select Esprima for a comprehensive and standards-compliant parsing solution that generates an AST, making it suitable for static analysis and tooling that requires deep code inspection.

README for doctrine

NPM version build status Test coverage Downloads Join the chat at https://gitter.im/eslint/doctrine

Doctrine

Doctrine is a JSDoc parser that parses documentation comments from JavaScript (you need to pass in the comment, not a whole JavaScript file).

Installation

You can install Doctrine using npm:

$ npm install doctrine --save-dev

Doctrine can also be used in web browsers using Browserify.

Usage

Require doctrine inside of your JavaScript:

var doctrine = require("doctrine");

parse()

The primary method is parse(), which accepts two arguments: the JSDoc comment to parse and an optional options object. The available options are:

  • unwrap - set to true to delete the leading /**, any * that begins a line, and the trailing */ from the source text. Default: false.
  • tags - an array of tags to return. When specified, Doctrine returns only tags in this array. For example, if tags is ["param"], then only @param tags will be returned. Default: null.
  • recoverable - set to true to keep parsing even when syntax errors occur. Default: false.
  • sloppy - set to true to allow optional parameters to be specified in brackets (@param {string} [foo]). Default: false.
  • lineNumbers - set to true to add lineNumber to each node, specifying the line on which the node is found in the source. Default: false.
  • range - set to true to add range to each node, specifying the start and end index of the node in the original comment. Default: false.

Here's a simple example:

var ast = doctrine.parse(
    [
        "/**",
        " * This function comment is parsed by doctrine",
        " * @param {{ok:String}} userName",
        "*/"
    ].join('\n'), { unwrap: true });

This example returns the following AST:

{
    "description": "This function comment is parsed by doctrine",
    "tags": [
        {
            "title": "param",
            "description": null,
            "type": {
                "type": "RecordType",
                "fields": [
                    {
                        "type": "FieldType",
                        "key": "ok",
                        "value": {
                            "type": "NameExpression",
                            "name": "String"
                        }
                    }
                ]
            },
            "name": "userName"
        }
    ]
}

See the demo page more detail.

Team

These folks keep the project moving and are resources for help:

Contributing

Issues and pull requests will be triaged and responded to as quickly as possible. We operate under the ESLint Contributor Guidelines, so please be sure to read them before contributing. If you're not sure where to dig in, check out the issues.

Frequently Asked Questions

Can I pass a whole JavaScript file to Doctrine?

No. Doctrine can only parse JSDoc comments, so you'll need to pass just the JSDoc comment to Doctrine in order to work.

License

doctrine

Copyright JS Foundation and other contributors, https://js.foundation

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

esprima

some of functions is derived from esprima

Copyright (C) 2012, 2011 Ariya Hidayat (twitter: @ariyahidayat) and other contributors.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  • Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

  • Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

closure-compiler

some of extensions is derived from closure-compiler

Apache License Version 2.0, January 2004 http://www.apache.org/licenses/

Where to ask for help?

Join our Chatroom