electron / electron-docs-linter

Parse and validate Electron's API documentation
http://npm.im/electron-docs-linter
21 stars 24 forks source link

electron-docs-linter Build Status

Parse and validate Electron's API documentation.

Installation

npm install electron-docs-linter --save

CLI Usage

To lint the docs:

electron-docs-linter path/to/electron/docs

If errors are found, they are printed to STDERR and the process exits un-gracefully.

To lint the docs and save the generated JSON schema to a file:

electron-docs-linter docs/api --version=1.2.3 --outfile=api.json

Programmatic Usage

The module exports a function that parses markdown docs in a given directory, then returns a JSON representation of all the APIs.

const lint = require('electron-docs-linter')
const docPath = './test/fixtures/electron/docs/api'
const targetVersion = '1.2.3' // the soon-to-be-released version of electron

lint(docPath, targetVersion).then(function (apis) {
  // `apis` is an array of API objects. To find one:
  var win = apis.find(api => api.name === 'BrowserWindow')

  // The array also has a string key for each API name, so
  // you can access APIs like this too:
  win = apis.BrowserWindow

  win.events.length
  // => 25

  win.events[0]
  // {
  //   "name": "page-title-updated",
  //   "description": "Emitted when the document...",
  //   "returns": [
  //     {
  //       "name": "event",
  //       "type": "Event"
  //     }
  //   ]
  // }

  win.instanceMethods[20]
  // {
  //   name: 'setSize',
  //   signature: '(width, height[, animate])'
  // }
})

How It Works

The linter starts with a list of all the API names as seed data.

Each API's structure is inferred by parsing its raw markdown documentation from the electron repo. The electron-docs module abstracts away the challenges of fetching file contents in bulk.

Electron's API documentation adheres to Electron Coding Style and the Electron Styleguide, so its content can be programmatically parsed. To make the content easy to parse, the raw markdown is converted to HTML using marky-markdown-lite, which returns a cheerio DOM object that can be queried and traversed using familiar CSS selectors.

The result is an array of API objects. The following metadata is included for each API, where appropriate:

Related Things and Prior Art

TypeScript Definitions

A lot of people want an up-to-date TypeScript definition file for Electron.

Dependencies

Dev Dependencies

License

MIT