Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(eslint-plugin)!: change recommended config #729

Merged
merged 22 commits into from Aug 13, 2019
Merged
Show file tree
Hide file tree
Changes from 16 commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
07a59d8
feat(eslint-plugin): change recommended config
bradzacher Jul 20, 2019
659115d
feat: disable base rules, prettier generated configs
bradzacher Jul 21, 2019
8d3cb2a
Merge branch 'master' into v2-update-recommended
bradzacher Jul 21, 2019
9b39860
Merge branch 'master' into v2-update-recommended
bradzacher Jul 25, 2019
52c1699
Merge branch 'master' into v2-update-recommended
bradzacher Jul 25, 2019
42d62f7
fix: lint errors
bradzacher Jul 25, 2019
df4b45c
Merge branch 'master' into v2-update-recommended
bradzacher Jul 25, 2019
d1ec431
Merge branch 'master' into v2-update-recommended
bradzacher Jul 28, 2019
c9ca0fe
chore: fix lint errors
bradzacher Jul 28, 2019
20761bb
Merge branch 'master' into v2-update-recommended
bradzacher Jul 29, 2019
22d2db7
chore: update yarn.lock
bradzacher Jul 29, 2019
ce7ecf1
Merge branch 'master' into v2-update-recommended
bradzacher Jul 29, 2019
a03c88f
feat: change defaults of no-this-alias
bradzacher Jul 29, 2019
bf4ae8a
fix: add generation for rules added in #595
bradzacher Jul 29, 2019
c3aef68
fix: fix the test because I'm a dummy
bradzacher Jul 30, 2019
953d20d
Merge branch 'master' into v2-update-recommended
bradzacher Jul 30, 2019
a031e18
chore: review fixes
bradzacher Jul 31, 2019
0c0cbc3
Merge branch 'master' into v2-update-recommended
bradzacher Aug 2, 2019
81b9d43
fix: correct defaults for no-inferrable-types
bradzacher Aug 8, 2019
a0404b8
docs: update no-inferrable-types docs
bradzacher Aug 8, 2019
aa1193e
fix: lint
bradzacher Aug 8, 2019
d56558b
Merge branch 'master' into v2-update-recommended
JamesHenry Aug 13, 2019
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
25 changes: 7 additions & 18 deletions .eslintrc.js
Expand Up @@ -21,23 +21,12 @@ module.exports = {
// our plugin :D
//

'@typescript-eslint/ban-ts-ignore': 'error',
'@typescript-eslint/consistent-type-definitions': 'error',
'@typescript-eslint/explicit-function-return-type': 'off',
'@typescript-eslint/explicit-member-accessibility': 'off',
'@typescript-eslint/indent': 'off',
'@typescript-eslint/no-explicit-any': 'warn',
'@typescript-eslint/no-inferrable-types': 'error',
'@typescript-eslint/no-misused-promises': 'error',
'@typescript-eslint/consistent-type-definitions': ['error', 'interface'],
'@typescript-eslint/no-explicit-any': 'error',
'@typescript-eslint/no-non-null-assertion': 'off',
bradzacher marked this conversation as resolved.
Show resolved Hide resolved
'@typescript-eslint/no-object-literal-type-assertion': 'off',
'@typescript-eslint/no-parameter-properties': 'off',
'@typescript-eslint/no-unnecessary-type-assertion': 'error',
'@typescript-eslint/no-use-before-define': 'off',
'@typescript-eslint/no-var-requires': 'off',
'@typescript-eslint/prefer-includes': 'error',
'@typescript-eslint/prefer-regexp-exec': 'error',
'@typescript-eslint/prefer-string-starts-ends-with': 'error',
'@typescript-eslint/unbound-method': 'off',

//
// eslint base
Expand Down Expand Up @@ -110,12 +99,12 @@ module.exports = {
'import/no-mutable-exports': 'error',
// Prevent importing the default as if it were named
'import/no-named-default': 'error',
// Prohibit named exports // we want everything to be a named export
'import/no-named-export': 'off',
// Prohibit named exports
'import/no-named-export': 'off', // we want everything to be a named export
// Forbid a module from importing itself
'import/no-self-import': 'error',
// Require modules with a single export to use a default export // we want everything to be named
'import/prefer-default-export': 'off',
// Require modules with a single export to use a default export
'import/prefer-default-export': 'off', // we want everything to be named
},
parserOptions: {
sourceType: 'module',
Expand Down
File renamed without changes.
4 changes: 2 additions & 2 deletions packages/eslint-plugin-tslint/src/custom-linter.ts
@@ -1,5 +1,5 @@
import { ILinterOptions, Linter, LintResult } from 'tslint';
import { Program } from 'typescript';
import { Program, SourceFile } from 'typescript';

// We need to access the program, but Linter has private program already
// eslint-disable-next-line @typescript-eslint/no-explicit-any
Expand All @@ -14,7 +14,7 @@ export class CustomLinter extends TSLintLinter {
return super.getResult();
}

getSourceFile(fileName: string) {
getSourceFile(fileName: string): SourceFile | undefined {
return this.program.getSourceFile(fileName);
}
}
30 changes: 15 additions & 15 deletions packages/eslint-plugin/README.md

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions packages/eslint-plugin/package.json
Expand Up @@ -49,8 +49,10 @@
"devDependencies": {
"@types/json-schema": "^7.0.3",
"@types/marked": "^0.6.5",
"@types/prettier": "^1.18.0",
"chalk": "^2.4.2",
"marked": "^0.7.0",
"prettier": "*",
"typescript": "*"
},
"peerDependencies": {
Expand Down
2 changes: 2 additions & 0 deletions packages/eslint-plugin/src/configs/all.json
Expand Up @@ -24,6 +24,7 @@
"@typescript-eslint/member-ordering": "error",
"no-array-constructor": "off",
"@typescript-eslint/no-array-constructor": "error",
"no-empty-function": "off",
"@typescript-eslint/no-empty-function": "error",
"@typescript-eslint/no-empty-interface": "error",
"@typescript-eslint/no-explicit-any": "error",
Expand Down Expand Up @@ -62,6 +63,7 @@
"@typescript-eslint/prefer-string-starts-ends-with": "error",
"@typescript-eslint/promise-function-async": "error",
"@typescript-eslint/require-array-sort-compare": "error",
"require-await": "off",
"@typescript-eslint/require-await": "error",
"@typescript-eslint/restrict-plus-operands": "error",
"semi": "off",
Expand Down
8 changes: 2 additions & 6 deletions packages/eslint-plugin/src/configs/base.json
@@ -1,9 +1,5 @@
{
"parser": "@typescript-eslint/parser",
"parserOptions": {
"sourceType": "module"
},
"plugins": [
"@typescript-eslint"
]
"parserOptions": { "sourceType": "module" },
bradzacher marked this conversation as resolved.
Show resolved Hide resolved
"plugins": ["@typescript-eslint"]
}
31 changes: 20 additions & 11 deletions packages/eslint-plugin/src/configs/recommended.json
@@ -1,38 +1,47 @@
{
"extends": "./configs/base.json",
"rules": {
"no-var": "error",
"prefer-const": "error",
"prefer-rest-params": "error",
"prefer-spread": "error",
"@typescript-eslint/adjacent-overload-signatures": "error",
"@typescript-eslint/array-type": "error",
bradzacher marked this conversation as resolved.
Show resolved Hide resolved
"@typescript-eslint/await-thenable": "error",
"@typescript-eslint/ban-ts-ignore": "error",
"@typescript-eslint/ban-types": "error",
"camelcase": "off",
"@typescript-eslint/camelcase": "error",
"@typescript-eslint/class-name-casing": "error",
"@typescript-eslint/consistent-type-assertions": "error",
"@typescript-eslint/explicit-function-return-type": "warn",
"@typescript-eslint/explicit-member-accessibility": "error",
"indent": "off",
"@typescript-eslint/indent": "error",
"@typescript-eslint/interface-name-prefix": "error",
"@typescript-eslint/member-delimiter-style": "error",
"no-array-constructor": "off",
"@typescript-eslint/no-array-constructor": "error",
"no-empty-function": "off",
"@typescript-eslint/no-empty-function": "error",
bradzacher marked this conversation as resolved.
Show resolved Hide resolved
"@typescript-eslint/no-empty-interface": "error",
"@typescript-eslint/no-explicit-any": "warn",
"@typescript-eslint/no-for-in-array": "error",
"@typescript-eslint/no-inferrable-types": "error",
"@typescript-eslint/no-misused-new": "error",
"@typescript-eslint/no-misused-promises": "error",
"@typescript-eslint/no-namespace": "error",
"@typescript-eslint/no-non-null-assertion": "error",
"@typescript-eslint/no-parameter-properties": "error",
"@typescript-eslint/no-non-null-assertion": "warn",
"@typescript-eslint/no-this-alias": "error",
"@typescript-eslint/no-unnecessary-type-assertion": "error",
"no-unused-vars": "off",
"@typescript-eslint/no-unused-vars": "warn",
"no-use-before-define": "off",
"@typescript-eslint/no-use-before-define": "error",
"@typescript-eslint/no-var-requires": "error",
"@typescript-eslint/prefer-includes": "error",
"@typescript-eslint/prefer-namespace-keyword": "error",
"@typescript-eslint/type-annotation-spacing": "error"
"@typescript-eslint/prefer-regexp-exec": "error",
"@typescript-eslint/prefer-string-starts-ends-with": "error",
"require-await": "off",
"@typescript-eslint/require-await": "error",
bradzacher marked this conversation as resolved.
Show resolved Hide resolved
"@typescript-eslint/triple-slash-reference": "error",
"@typescript-eslint/unbound-method": "error",
"no-var": "error",
"prefer-const": "error",
"prefer-rest-params": "error",
"prefer-spread": "error"
}
}
7 changes: 4 additions & 3 deletions packages/eslint-plugin/src/rules/array-type.ts
Expand Up @@ -94,7 +94,8 @@ export default util.createRule<Options, MessageIds>({
docs: {
description: 'Requires using either `T[]` or `Array<T>` for arrays',
category: 'Stylistic Issues',
recommended: 'error',
// too opinionated to be recommended
recommended: false,
},
fixable: 'code',
messages: {
Expand Down Expand Up @@ -168,7 +169,7 @@ export default util.createRule<Options, MessageIds>({
}

return {
TSArrayType(node: TSESTree.TSArrayType) {
TSArrayType(node): void {
if (
isArrayOption ||
(isArraySimpleOption && isSimpleType(node.elementType))
Expand Down Expand Up @@ -241,7 +242,7 @@ export default util.createRule<Options, MessageIds>({
});
},

TSTypeReference(node: TSESTree.TSTypeReference) {
TSTypeReference(node): void {
if (
isGenericOption ||
node.typeName.type !== AST_NODE_TYPES.Identifier
Expand Down
4 changes: 2 additions & 2 deletions packages/eslint-plugin/src/rules/await-thenable.ts
Expand Up @@ -9,7 +9,7 @@ export default util.createRule({
docs: {
description: 'Disallows awaiting a value that is not a Thenable',
category: 'Best Practices',
recommended: false,
recommended: 'error',
},
messages: {
await: 'Unexpected `await` of a non-Promise (non-"Thenable") value.',
Expand All @@ -24,7 +24,7 @@ export default util.createRule({
const checker = parserServices.program.getTypeChecker();

return {
AwaitExpression(node) {
AwaitExpression(node): void {
const originalNode = parserServices.esTreeNodeToTSNodeMap.get<
ts.AwaitExpression
>(node);
Expand Down
2 changes: 1 addition & 1 deletion packages/eslint-plugin/src/rules/ban-ts-ignore.ts
Expand Up @@ -7,7 +7,7 @@ export default util.createRule({
docs: {
description: 'Bans “// @ts-ignore” comments from being used',
category: 'Best Practices',
recommended: false,
recommended: 'error',
},
schema: [],
messages: {
Expand Down
5 changes: 3 additions & 2 deletions packages/eslint-plugin/src/rules/ban-types.ts
Expand Up @@ -25,7 +25,7 @@ function stringifyTypeName(

function getCustomMessage(
bannedType: null | string | { message?: string; fixWith?: string },
) {
): string {
if (bannedType === null) {
return '';
}
Expand Down Expand Up @@ -108,7 +108,7 @@ export default util.createRule<Options, MessageIds>({
],
create(context, [{ types: bannedTypes }]) {
return {
TSTypeReference({ typeName }) {
TSTypeReference({ typeName }): void {
const name = stringifyTypeName(typeName, context.getSourceCode());

if (name in bannedTypes) {
Expand All @@ -124,6 +124,7 @@ export default util.createRule<Options, MessageIds>({
name: name,
customMessage,
},
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
fix: fixWith ? fixer => fixer.replaceText(typeName, fixWith) : null,
});
}
Expand Down
2 changes: 1 addition & 1 deletion packages/eslint-plugin/src/rules/camelcase.ts
Expand Up @@ -90,7 +90,7 @@ export default util.createRule<Options, MessageIds>({
}

return {
Identifier(node) {
Identifier(node): void {
/*
* Leading and trailing underscores are commonly used to flag
* private/protected identifiers, strip them
Expand Down
4 changes: 2 additions & 2 deletions packages/eslint-plugin/src/rules/class-name-casing.ts
Expand Up @@ -64,15 +64,15 @@ export default util.createRule({
| TSESTree.ClassDeclaration
| TSESTree.TSInterfaceDeclaration
| TSESTree.ClassExpression,
) {
): void {
// class expressions (i.e. export default class {}) are OK
if (node.id && !isPascalCase(node.id.name)) {
report(node, node.id);
}
},
"VariableDeclarator[init.type='ClassExpression']"(
node: TSESTree.VariableDeclarator,
) {
): void {
if (
node.id.type === AST_NODE_TYPES.ArrayPattern ||
node.id.type === AST_NODE_TYPES.ObjectPattern
Expand Down
10 changes: 5 additions & 5 deletions packages/eslint-plugin/src/rules/consistent-type-assertions.ts
Expand Up @@ -77,7 +77,7 @@ export default util.createRule<Options, MessageIds>({

function reportIncorrectAssertionType(
node: TSESTree.TSTypeAssertion | TSESTree.TSAsExpression,
) {
): void {
const messageId = options.assertionStyle;
context.report({
node,
Expand All @@ -89,7 +89,7 @@ export default util.createRule<Options, MessageIds>({
});
}

function checkType(node: TSESTree.TypeNode) {
function checkType(node: TSESTree.TypeNode): boolean {
switch (node.type) {
case AST_NODE_TYPES.TSAnyKeyword:
case AST_NODE_TYPES.TSUnknownKeyword:
Expand All @@ -107,7 +107,7 @@ export default util.createRule<Options, MessageIds>({

function checkExpression(
node: TSESTree.TSTypeAssertion | TSESTree.TSAsExpression,
) {
): void {
if (
options.assertionStyle === 'never' ||
options.objectLiteralTypeAssertions === 'allow' ||
Expand Down Expand Up @@ -137,15 +137,15 @@ export default util.createRule<Options, MessageIds>({
}

return {
TSTypeAssertion(node) {
TSTypeAssertion(node): void {
if (options.assertionStyle !== 'angle-bracket') {
reportIncorrectAssertionType(node);
return;
}

checkExpression(node);
},
TSAsExpression(node) {
TSAsExpression(node): void {
if (options.assertionStyle !== 'as') {
reportIncorrectAssertionType(node);
return;
Expand Down
Expand Up @@ -9,6 +9,7 @@ export default util.createRule({
description:
'Consistent with type definition either `interface` or `type`',
category: 'Stylistic Issues',
// too opinionated to be recommended
recommended: false,
},
messages: {
Expand All @@ -29,7 +30,7 @@ export default util.createRule({
return {
"TSTypeAliasDeclaration[typeAnnotation.type='TSTypeLiteral']"(
node: TSESTree.TSTypeAliasDeclaration,
) {
): void {
if (option === 'interface') {
context.report({
node: node.id,
Expand Down Expand Up @@ -63,7 +64,7 @@ export default util.createRule({
});
}
},
TSInterfaceDeclaration(node) {
TSInterfaceDeclaration(node): void {
if (option === 'type') {
context.report({
node: node.id,
Expand Down
Expand Up @@ -47,8 +47,8 @@ export default util.createRule<Options, MessageIds>({
defaultOptions: [
{
allowExpressions: false,
allowTypedFunctionExpressions: false,
allowHigherOrderFunctions: false,
allowTypedFunctionExpressions: true,
allowHigherOrderFunctions: true,
},
],
create(context, [options]) {
Expand Down
Expand Up @@ -33,8 +33,9 @@ export default util.createRule<Options, MessageIds>({
docs: {
description:
'Require explicit accessibility modifiers on class properties and methods',
category: 'Best Practices',
recommended: 'error',
category: 'Stylistic Issues',
// too opinionated to be recommended
recommended: false,
},
messages: {
missingAccessibility:
Expand Down Expand Up @@ -82,7 +83,7 @@ export default util.createRule<Options, MessageIds>({
nodeType: string,
node: TSESTree.Node,
nodeName: string,
) {
): void {
context.report({
node: node,
messageId: messageId,
Expand Down Expand Up @@ -179,7 +180,7 @@ export default util.createRule<Options, MessageIds>({
*/
function checkParameterPropertyAccessibilityModifier(
node: TSESTree.TSParameterProperty,
) {
): void {
const nodeType = 'parameter property';
// HAS to be an identifier or assignment or TSC will throw
if (
Expand Down
3 changes: 2 additions & 1 deletion packages/eslint-plugin/src/rules/generic-type-naming.ts
Expand Up @@ -10,6 +10,7 @@ export default util.createRule<Options, MessageIds>({
docs: {
description: 'Enforces naming of generic type variables',
category: 'Stylistic Issues',
// too opinionated to be recommended
recommended: false,
},
messages: {
Expand All @@ -30,7 +31,7 @@ export default util.createRule<Options, MessageIds>({
const regex = new RegExp(rule!);

return {
TSTypeParameter(node) {
TSTypeParameter(node): void {
const name = node.name.name;

if (name && !regex.test(name)) {
Expand Down