All Projects → standard → Standard Engine

standard / Standard Engine

Licence: mit
🚒 The guts of `standard` modularized for reuse

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to Standard Engine

standard-packages
List of packages that use `standard`
Stars: ✭ 32 (-73.33%)
Mutual labels:  eslint, style, standard
Snazzy
Format JavaScript Standard Style as Stylish (i.e. snazzy) output
Stars: ✭ 381 (+217.5%)
Mutual labels:  eslint, standard, style
Igcommit
Git pre-receive hook to check commits and code style
Stars: ✭ 135 (+12.5%)
Mutual labels:  eslint, standard
Eslint Config Standard
ESLint Config for JavaScript Standard Style
Stars: ✭ 2,229 (+1757.5%)
Mutual labels:  eslint, standard
standard-www
👆 Website for JavaScript Standard Style (@standard)
Stars: ✭ 28 (-76.67%)
Mutual labels:  style, standard
Eslint Config Standard With Typescript
An extension of eslint-config-standard, made for TypeScript.
Stars: ✭ 269 (+124.17%)
Mutual labels:  eslint, style
Ale Sensible
Pretty, responsive and smooth defaults for a sane ALE, gets you started in 30 seconds
Stars: ✭ 30 (-75%)
Mutual labels:  eslint, standard
Awesome Standard
Documenting the explosion of packages in the standard ecosystem!
Stars: ✭ 300 (+150%)
Mutual labels:  eslint, standard
Eslint Config Standard React
ESLint Shareable Config for React/JSX support in JavaScript Standard Style
Stars: ✭ 416 (+246.67%)
Mutual labels:  eslint, standard
Standard
🌟 JavaScript Style Guide, with linter & automatic code fixer
Stars: ✭ 26,433 (+21927.5%)
Mutual labels:  eslint, standard
Eslint Config Standard Jsx
ESLint Shareable Config for JSX support in JavaScript Standard Style
Stars: ✭ 79 (-34.17%)
Mutual labels:  eslint, standard
Reeakt
A modern React boilerplate to awesome web applications
Stars: ✭ 116 (-3.33%)
Mutual labels:  eslint
Dwc
Darwin Core
Stars: ✭ 106 (-11.67%)
Mutual labels:  standard
Notifications
Notifications API Standard
Stars: ✭ 105 (-12.5%)
Mutual labels:  standard
Security Txt
A proposed standard that allows websites to define security policies.
Stars: ✭ 1,393 (+1060.83%)
Mutual labels:  standard
Eslint Plugin Meteor
🧐 Meteor specific linting rules for ESLint
Stars: ✭ 117 (-2.5%)
Mutual labels:  eslint
React Redux Auth0 Kit
Minimal starter boilerplate project with CRA, React, Redux, React Router and Auth0 authentication
Stars: ✭ 115 (-4.17%)
Mutual labels:  eslint
Node Flowtype Boilerplate
This boilerplate repository is outdated and no longer maintained. Instead, I strongly recommend to use TypeScript.
Stars: ✭ 104 (-13.33%)
Mutual labels:  eslint
Hapi Starter Kit
Hapi.js based REST boilerplate which uses latest ES7/ES8 features (async/await) with code coverage and follows best pratices
Stars: ✭ 103 (-14.17%)
Mutual labels:  eslint
Frontbook
📖 FrontBook is a small and modern frontend boilerplate, enabling you to write ES201* today in production-ready projects.
Stars: ✭ 102 (-15%)
Mutual labels:  eslint

standard-engine Tests CI npm downloads javascript style guide

Overview

Wrap your own eslint rules in a easy-to-use command line tool and/or a JS module.

Install

npm install standard-engine

Who is using standard-engine?

Here is a list of packages using standard-engine. Dive into them for ideas!

Did you make your own? Create a pull request and we will add it to the README!

Usage

Create the files below and fill in your own values for options.js.

index.js

// programmatic usage
var Linter = require('standard-engine').linter
var opts = require('./options.js')
module.exports = new Linter(opts)

cli.js

#!/usr/bin/env node

var opts = require('../options.js')
require('standard-engine').cli(opts)

options.js

var eslint = require('eslint')
var path = require('path')
var pkg = require('./package.json')

module.exports = {
  // homepage, version and bugs pulled from package.json
  version: pkg.version,
  homepage: pkg.homepage,
  bugs: pkg.bugs.url,
  eslint: eslint, // pass any version of eslint >= 1.0.0
  cmd: 'pocketlint', // should match the "bin" key in your package.json
  tagline: 'Live by your own standards!', // displayed in output --help
  eslintConfig: {
    configFile: path.join(__dirname, 'eslintrc.json')
  },
  cwd: '' // current working directory, passed to eslint
}

Additionally an optional parseOpts() function can be provided. See below for details.

eslintrc.json

Put all your .eslintrc rules in this file. A good practice is to create an ESLint Shareable Config and extend it, but its not required:

{
  // pretend that the package eslint-config-pocketlint exists!
  "extends": ["pocketlint"]
}

Take a look at eslint-config-standard as an example, or if you want to extend/mutate standard, see eslint-config-semistandard.

Editor Integrations

Integrations and plugins should recognize the standard-engine tag in a package.json file. This allows end users to specify an arbitrary standard-engine compatible linter that the plugin should use. The standard-engine tag can be a string of the package:

{
  "standard-engine": "pocketlint"
}

or an object with a name value of the package:

{
  "standard-engine": {
    "name": "pocketlint"
  }
}

Atom

linter-js-standard-engine is an Atom plugin that supports some of the more popular standard-engine implementations out of the box. It detects them by scanning through the dependencies of the project that you are editing. You can use it with any other implementation through configuration in the projects package.json file.

Engine Features

Extensions

The extensions .js, .jsx, .mjs, and .cjs are linted by default. If you pass directory paths to the standardEngine.lintFiles() method, standard-engine checks the files in those directories that have the given extensions.

For example, when passing the src/ directory and the extensions option is ['.js', '.jsx'], standard-engine will lint *.js and *.jsx files in src/.

You can disable these default ignores by setting the noDefaultExensions option to true.

Ignoring Files

The paths node_modules/**, *.min.js, coverage/**, hidden files/folders (beginning with .), and all patterns in a project's root .gitignore file are automatically ignored.

Sometimes you need to ignore additional folders or specific minfied files. To do that, add a ignore property to package.json:

"pocketlint": { // this key should equal the value of cmd in options.js
  "ignore": [
    "**/out/",
    "/lib/select2/",
    "/lib/ckeditor/",
    "tmp.js"
  ]
}

Some files are ignored by default:

var DEFAULT_IGNORE = [
  '*.min.js',
  'coverage/',
  'node_modules/',
  'vendor/'
]

You can disable these default ignores by setting the noDefaultIgnore option to true.

Hiding Warnings

Since standard-engine uses eslint under-the-hood, you can hide warnings as you normally would if you used eslint directly.

Disable all rules on a specific line:

file = 'I know what I am doing' // eslint-disable-line

Or, disable only the "no-use-before-define" rule:

file = 'I know what I am doing' // eslint-disable-line no-use-before-define

Or, disable the "no-use-before-define" rule for multiple lines:

/*eslint-disable no-use-before-define */
// offending code here...
// offending code here...
// offending code here...
/*eslint-enable no-use-before-define */

Defining Globals in a project's package.json

standard-engine will also look in a project's package.json and respect any global variables defined like so:

{
  "pocketlint": { // this key should equal the value of cmd in options.js
    "globals": [ // can be a string or an array of strings
      "myVar1",
      "myVar2"
    ]
  }
}

You may use global as an alias for globals (just don't specify both).

Loading ESLint plugins in a project's package.json

Additional ESLint plugins can be specified like so:

{
  "pocketlint": { // this key should equal the value of cmd in options.js
    "plugins": [ // can be a string or an array of strings
      "flowtype"
    ]
  }
}

You may use plugin as an alias for plugins (just don't specify both). Plugins must be installed (example: npm install eslint-plugin-flowtype or globally: npm install eslint-plugin-flowtype -g).

Loading additional environments in a project's package.json

Additional environments can be specified like so:

{
  "pocketlint": { // this key should equal the value of cmd in options.js
    "envs": [ "browser", "mocha" ]
  }
}

envs can be a string, an array of strings, or an object. In the latter case the keys are used as the environment name, but falsy values mean the environment is not actually loaded. You cannot unload environments by setting a falsy value.

You may use env as an alias for envs (just don't specify both).

Custom JS parsers for bleeding-edge ES6 or ES7 support?

standard-engine supports custom JS parsers. To use a custom parser, install it from npm (example: npm install babel-eslint) and add this to your package.json:

{
  "pocketlint": { // this key should equal the value of cmd in your options.js
    "parser": "babel-eslint"
  }
}

If you're using your custom linter globally (you installed it with -g), then you also need to install babel-eslint globally with npm install babel-eslint -g.

Custom options

You can provide a parseOpts() function in the options.js exports:

var eslint = require('eslint')
var path = require('path')
var pkg = require('./package.json')

module.exports = {
  // homepage, version and bugs pulled from package.json
  version: pkg.version,
  homepage: pkg.homepage,
  bugs: pkg.bugs.url,
  eslint: eslint, // pass any version of eslint >= 1.0.0
  cmd: 'pocketlint', // should match the "bin" key in your package.json
  tagline: 'Live by your own standards!', // displayed in output --help
  eslintConfig: {
    configFile: path.join(__dirname, 'eslintrc.json')
  },
  parseOpts: function (opts, packageOpts, rootDir) {
    // provide implementation here, then return the opts object (or a new one)
    return opts
  }
}

This function is called with the current options object (opts), any options extracted from the project's package.json (packageOpts), and the directory that contained that package.json file (rootDir, equivalent to opts.cwd if no file was found).

Modify and return opts, or return a new object with the options that are to be used.

The following options are provided in the opts object, and must be on the returned object:

  • ignore: array of file patterns (in .gitignore format) to ignore
  • cwd: string, the current working directory
  • fix: boolean, whether to automatically fix problems
  • eslintConfig: object, the options passed to ESLint's CLIEngine

API Usage

engine.lintText(text, [opts], callback)

Lint the provided source text to enforce your defined style. An opts object may be provided:

{
  // unique to lintText
  filename: '',         // path of file containing the text being linted

  // common to lintText and lintFiles
  cwd: '',              // current working directory (default: process.cwd())
  fix: false,           // automatically fix problems
  extensions: [],       // file extensions to lint (has sane defaults)
  globals: [],          // custom global variables to declare
  plugins: [],          // custom eslint plugins
  envs: [],             // custom eslint environment
  parser: '',           // custom js parser (e.g. babel-eslint)
  usePackageJson: true, // use options from nearest package.json?
  useGitIgnore: true    // use file ignore patterns from .gitignore?
}

All options are optional, though some ESLint plugins require the filename option.

Additional options may be loaded from a package.json if it's found for the current working directory. See below for further details.

The callback will be called with an Error and results object.

The results object will contain the following properties:

var results = {
  results: [
    {
      filePath: '',
      messages: [
        { ruleId: '', message: '', line: 0, column: 0 }
      ],
      errorCount: 0,
      warningCount: 0,
      output: '' // fixed source code (only present with {fix: true} option)
    }
  ],
  errorCount: 0,
  warningCount: 0
}

results = engine.lintTextSync(text, [opts])

Synchronous version of engine.lintText(). If an error occurs, an exception is thrown. Otherwise, a results object is returned.

engine.lintFiles(files, [opts], callback)

Lint the provided files globs. An opts object may be provided:

{
  // unique to lintFiles
  ignore: [],           // file globs to ignore (has sane defaults)

  // common to lintText and lintFiles
  cwd: '',              // current working directory (default: process.cwd())
  fix: false,           // automatically fix problems
  extensions: [],       // file extensions to lint (has sane defaults)
  globals: [],          // custom global variables to declare
  plugins: [],          // custom eslint plugins
  envs: [],             // custom eslint environment
  parser: '',           // custom js parser (e.g. babel-eslint)
  usePackageJson: true, // use options from nearest package.json?
  useGitIgnore: true    // use file ignore patterns from .gitignore?
}

Additional options may be loaded from a package.json if it's found for the current working directory. See below for further details.

Both ignore and files patterns are resolved relative to the current working directory.

The callback will be called with an Error and results object (same as above).

NOTE: There is no synchronous version of engine.lintFiles().

Full set of opts

This is the full set of options accepted by the above APIs. Not all options make sense for each API, for example ignore is not used with lintText(), and filename is not used with lintFiles().

{
  ignore: [],   // file patterns to ignore (has sane defaults)
  cwd: '',      // current working directory (default: process.cwd())
  filename: '', // path of the file containing the text being linted (optional)
  fix: false,   // automatically fix problems
  globals: [],  // custom global variables to declare
  plugins: [],  // custom eslint plugins
  envs: [],     // custom eslint environment
  parser: ''    // custom js parser (e.g. babel-eslint)
}

The following aliases are available:

{
  global: [],  // custom global variables to declare
  plugin: [],  // custom eslint plugins
  env: [],     // custom eslint environment
}

Note that globals, plugins and envs take preference.

The parser option takes preference over any parser setting in the project's package.json.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].