eslint-plugin-flowtype
Advanced tools
Comparing version 2.3.1 to 2.4.0
@@ -19,5 +19,11 @@ /** | ||
if (setup.errors) { | ||
paragraphs.push('// Message: ' + setup.errors[0].message); | ||
setup.errors.forEach((message) => { | ||
paragraphs.push('// Message: ' + message.message); | ||
}); | ||
} | ||
if (setup.rules) { | ||
paragraphs.push('// Additional rules: ' + JSON.stringify(setup.rules)); | ||
} | ||
return paragraphs.join('\n'); | ||
@@ -51,8 +57,7 @@ }; | ||
documentBody = documentBody.replace(/<!-- assertions ([a-z]+?) -->/ig, (assertionsBlock) => { | ||
let ruleName, | ||
ruleAssertions; | ||
let exampleBody; | ||
ruleName = assertionsBlock.match(/assertions ([a-z]+)/i)[1]; | ||
const ruleName = assertionsBlock.match(/assertions ([a-z]+)/i)[1]; | ||
ruleAssertions = assertions[ruleName]; | ||
const ruleAssertions = assertions[ruleName]; | ||
@@ -65,3 +70,13 @@ if (!ruleAssertions) { | ||
return 'The following patterns are considered problems:\n\n```js\n' + ruleAssertions.invalid.join('\n\n') + '\n```\n\nThe following patterns are not considered problems:\n\n```js\n' + ruleAssertions.valid.join('\n\n') + '\n```\n'; | ||
exampleBody = ''; | ||
if (ruleAssertions.invalid.length) { | ||
exampleBody += 'The following patterns are considered problems:\n\n```js\n' + ruleAssertions.invalid.join('\n\n') + '\n```\n\n'; | ||
} | ||
if (ruleAssertions.valid.length) { | ||
exampleBody += 'The following patterns are not considered problems:\n\n```js\n' + ruleAssertions.valid.join('\n\n') + '\n```\n\n'; | ||
} | ||
return exampleBody; | ||
}); | ||
@@ -68,0 +83,0 @@ |
@@ -7,2 +7,6 @@ 'use strict'; | ||
var _defineFlowType = require('./rules/defineFlowType'); | ||
var _defineFlowType2 = _interopRequireDefault(_defineFlowType); | ||
var _requireParameterType = require('./rules/requireParameterType'); | ||
@@ -32,2 +36,6 @@ | ||
var _useFlowType = require('./rules/useFlowType'); | ||
var _useFlowType2 = _interopRequireDefault(_useFlowType); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
@@ -37,2 +45,3 @@ | ||
rules: { | ||
'define-flow-type': _defineFlowType2.default, | ||
'require-parameter-type': _requireParameterType2.default, | ||
@@ -43,5 +52,7 @@ 'require-return-type': _requireReturnType2.default, | ||
'space-before-type-colon': _spaceBeforeTypeColon2.default, | ||
'type-id-match': _typeIdMatch2.default | ||
'type-id-match': _typeIdMatch2.default, | ||
'use-flow-type': _useFlowType2.default | ||
}, | ||
rulesConfig: { | ||
'define-flow-type': 0, | ||
'require-parameter-type': 0, | ||
@@ -51,5 +62,6 @@ 'require-return-type': 0, | ||
'space-before-type-colon': 0, | ||
'type-id-match': 0 | ||
'type-id-match': 0, | ||
'use-flow-type': 0 | ||
} | ||
}; | ||
module.exports = exports['default']; |
{ | ||
"name": "eslint-plugin-flowtype", | ||
"description": "Flowtype linting rules for ESLint.", | ||
"version": "2.3.1", | ||
"version": "2.4.0", | ||
"main": "./dist/index.js", | ||
@@ -6,0 +6,0 @@ "repository": { |
213
README.md
@@ -14,2 +14,11 @@ <h1 id="eslint-plugin-flowtype">eslint-plugin-flowtype</h1> | ||
* [`onlyFilesWithFlowAnnotation`](#eslint-plugin-flowtype-settings-onlyfileswithflowannotation) | ||
* [Rules](#eslint-plugin-flowtype-rules) | ||
* [`define-flow-type`](#eslint-plugin-flowtype-rules-define-flow-type) | ||
* [`require-parameter-type`](#eslint-plugin-flowtype-rules-require-parameter-type) | ||
* [`require-return-type`](#eslint-plugin-flowtype-rules-require-return-type) | ||
* [`require-valid-file-annotation`](#eslint-plugin-flowtype-rules-require-valid-file-annotation) | ||
* [`space-after-type-colon`](#eslint-plugin-flowtype-rules-space-after-type-colon) | ||
* [`space-before-type-colon`](#eslint-plugin-flowtype-rules-space-before-type-colon) | ||
* [`type-id-match`](#eslint-plugin-flowtype-rules-type-id-match) | ||
* [`use-flow-type`](#eslint-plugin-flowtype-rules-use-flow-type) | ||
@@ -46,2 +55,3 @@ | ||
"rules": { | ||
"flowtype/define-flow-type": 1, | ||
"flowtype/require-parameter-type": 1, | ||
@@ -66,3 +76,4 @@ "flowtype/require-return-type": [ | ||
"^([A-Z][a-z0-9]+)+Type$" | ||
] | ||
], | ||
"flowtype/use-flow-type": 1 | ||
}, | ||
@@ -91,8 +102,128 @@ "settings": { | ||
} | ||
``` | ||
``` | ||
## Rules | ||
<h2 id="eslint-plugin-flowtype-rules">Rules</h2> | ||
### `require-parameter-type` | ||
<h3 id="eslint-plugin-flowtype-rules-define-flow-type"><code>define-flow-type</code></h3> | ||
Marks Flow type identifiers as defined. | ||
Used to suppress [`no-undef`](http://eslint.org/docs/rules/no-undef) reporting of type identifiers. | ||
The following patterns are not considered problems: | ||
```js | ||
var a: AType | ||
// Additional rules: {"no-undef":2} | ||
var a: AType; var b: AType | ||
// Additional rules: {"no-undef":2} | ||
var a; (a: AType) | ||
// Additional rules: {"no-undef":2} | ||
var a: AType<BType> | ||
// Additional rules: {"no-undef":2} | ||
type A = AType | ||
// Additional rules: {"no-undef":2} | ||
function f(a: AType) {} | ||
// Additional rules: {"no-undef":2} | ||
function f(a: AType.a) {} | ||
// Additional rules: {"no-undef":2} | ||
function f(a: AType.a.b) {} | ||
// Additional rules: {"no-undef":2} | ||
function f(a): AType {}; var a: AType | ||
// Additional rules: {"no-undef":2} | ||
function f(a): AType {} | ||
// Additional rules: {"no-undef":2} | ||
class C { a: AType } | ||
// Additional rules: {"no-undef":2} | ||
class C { a: AType.a } | ||
// Additional rules: {"no-undef":2} | ||
class C { a: AType.a.b } | ||
// Additional rules: {"no-undef":2} | ||
class C implements AType {} | ||
// Additional rules: {"no-undef":2} | ||
interface AType {} | ||
// Additional rules: {"no-undef":2} | ||
({ a: ({b() {}}: AType) }) | ||
// Additional rules: {"no-undef":2} | ||
type X = {Y<AType>(): BType} | ||
// Additional rules: {"no-undef":2} | ||
interface AType<BType> {} | ||
// Additional rules: {"no-undef":2} | ||
var a: AType | ||
// Additional rules: {"no-undef":2,"no-use-before-define":[2,"nofunc"]} | ||
var a: AType; var b: AType | ||
// Additional rules: {"no-undef":2,"no-use-before-define":[2,"nofunc"]} | ||
var a; (a: AType) | ||
// Additional rules: {"no-undef":2,"no-use-before-define":[2,"nofunc"]} | ||
var a: AType<BType> | ||
// Additional rules: {"no-undef":2,"no-use-before-define":[2,"nofunc"]} | ||
type A = AType | ||
// Additional rules: {"no-undef":2,"no-use-before-define":[2,"nofunc"]} | ||
function f(a: AType) {} | ||
// Additional rules: {"no-undef":2,"no-use-before-define":[2,"nofunc"]} | ||
function f(a: AType.a) {} | ||
// Additional rules: {"no-undef":2,"no-use-before-define":[2,"nofunc"]} | ||
function f(a: AType.a.b) {} | ||
// Additional rules: {"no-undef":2,"no-use-before-define":[2,"nofunc"]} | ||
function f(a): AType {}; var a: AType | ||
// Additional rules: {"no-undef":2,"no-use-before-define":[2,"nofunc"]} | ||
function f(a): AType {} | ||
// Additional rules: {"no-undef":2,"no-use-before-define":[2,"nofunc"]} | ||
class C { a: AType } | ||
// Additional rules: {"no-undef":2,"no-use-before-define":[2,"nofunc"]} | ||
class C { a: AType.a } | ||
// Additional rules: {"no-undef":2,"no-use-before-define":[2,"nofunc"]} | ||
class C { a: AType.a.b } | ||
// Additional rules: {"no-undef":2,"no-use-before-define":[2,"nofunc"]} | ||
class C implements AType {} | ||
// Additional rules: {"no-undef":2,"no-use-before-define":[2,"nofunc"]} | ||
interface AType {} | ||
// Additional rules: {"no-undef":2,"no-use-before-define":[2,"nofunc"]} | ||
({ a: ({b() {}}: AType) }) | ||
// Additional rules: {"no-undef":2,"no-use-before-define":[2,"nofunc"]} | ||
type X = {Y<AType>(): BType} | ||
// Additional rules: {"no-undef":2,"no-use-before-define":[2,"nofunc"]} | ||
interface AType<BType> {} | ||
// Additional rules: {"no-undef":2,"no-use-before-define":[2,"nofunc"]} | ||
``` | ||
<h3 id="eslint-plugin-flowtype-rules-require-parameter-type"><code>require-parameter-type</code></h3> | ||
Requires that all function parameters have type annotations. | ||
@@ -143,4 +274,5 @@ | ||
### `require-return-type` | ||
<h3 id="eslint-plugin-flowtype-rules-require-return-type"><code>require-return-type</code></h3> | ||
Requires that functions have return type annotation. | ||
@@ -256,7 +388,8 @@ | ||
### `require-valid-file-annotation` | ||
<h3 id="eslint-plugin-flowtype-rules-require-valid-file-annotation"><code>require-valid-file-annotation</code></h3> | ||
Makes sure that files have a valid `@flow` annotation. It will report annotations with typos (such as `// @floww`) or not placed at the top of the file, and optionaly missing annotations. | ||
#### Options | ||
<h4 id="eslint-plugin-flowtype-rules-require-valid-file-annotation-options">Options</h4> | ||
@@ -327,4 +460,5 @@ By default, this rule won't complain if there is no `@flow` annotation at all in the file. Passing a `"always"` option reports files missing those annotations as well. | ||
### `space-after-type-colon` | ||
<h3 id="eslint-plugin-flowtype-rules-space-after-type-colon"><code>space-after-type-colon</code></h3> | ||
Enforces consistent spacing after the type annotation colon. | ||
@@ -447,4 +581,5 @@ | ||
### `space-before-type-colon` | ||
<h3 id="eslint-plugin-flowtype-rules-space-before-type-colon"><code>space-before-type-colon</code></h3> | ||
Enforces consistent spacing before the type annotation colon. | ||
@@ -485,7 +620,8 @@ | ||
### `type-id-match` | ||
<h3 id="eslint-plugin-flowtype-rules-type-id-match"><code>type-id-match</code></h3> | ||
Enforces a consistent naming pattern for type aliases. | ||
#### Options | ||
<h4 id="eslint-plugin-flowtype-rules-type-id-match-options">Options</h4> | ||
@@ -528,1 +664,56 @@ This rule needs a text RegExp to operate with Its signature is as follows: | ||
<h3 id="eslint-plugin-flowtype-rules-use-flow-type"><code>use-flow-type</code></h3> | ||
Marks Flow [type alias](https://flowtype.org/docs/type-aliases.html) declarations as used. | ||
Used to suppress [`no-unused-vars`](http://eslint.org/docs/rules/no-unused-vars) errors that are triggered by type aliases. | ||
The following patterns are not considered problems: | ||
```js | ||
declare class A {} | ||
// Additional rules: {"no-unused-vars":1} | ||
declare function A(): Y | ||
// Additional rules: {"no-unused-vars":1} | ||
declare module A {} | ||
// Additional rules: {"no-unused-vars":1} | ||
declare module A { declare var a: Y } | ||
// Additional rules: {"no-unused-vars":1} | ||
declare var A: Y | ||
// Additional rules: {"no-unused-vars":1} | ||
import type A from "a"; (function<T: A>(): T {}) | ||
// Additional rules: {"no-unused-vars":1} | ||
(function<T: A>(): T {}); import type A from "a" | ||
// Additional rules: {"no-unused-vars":1} | ||
import type {A} from "a"; (function<T: A>(): T {}) | ||
// Additional rules: {"no-unused-vars":1} | ||
(function<T: A>(): T {}); import type {A} from "a" | ||
// Additional rules: {"no-unused-vars":1} | ||
(function<T: A>(): T {}); import type {a as A} from "a" | ||
// Additional rules: {"no-unused-vars":1} | ||
type A = {}; function x<Y: A>(i: Y) { i }; x() | ||
// Additional rules: {"no-unused-vars":1} | ||
function x<Y: A>(i: Y) { i }; type A = {}; x() | ||
// Additional rules: {"no-unused-vars":1} | ||
type A = {}; function x<Y: A.B.C>(i: Y) { i }; x() | ||
// Additional rules: {"no-unused-vars":1} | ||
function x<Y: A.B.C>(i: Y) { i }; type A = {}; x() | ||
// Additional rules: {"no-unused-vars":1} | ||
``` | ||
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
63437
29
493
710