tslint-microsoft-contrib
Version:
TSLint Rules for Microsoft
287 lines (280 loc) • 13.5 kB
JSON
/**
* This "recommended" ruleset is considered legacy;
* it is generally preferable to extend from the 'recommended' or 'latest' rulesets.
* We recommend you instead explicitly include `tslint:recommended`, `tslint:latest`, or `tslint:all`
* in your `tslint.json` rather than enable core rules through this configuration.
*
* These rule settings are a broad, general recommendation for a good default configuration.
* This file is exported in the npm/nuget package as ./tslint.json.
*/
{
"rulesDirectory": ["./"],
"rules": {
/**
* Security Rules. The following rules should be turned on because they find security issues
* or are recommended in the Microsoft Secure Development Lifecycle (SDL)
*/
"function-constructor": true,
"insecure-random": true,
"no-banned-terms": true,
"no-cookies": true,
"no-delete-expression": true,
"no-disable-auto-sanitization": true,
"no-document-domain": true,
"no-document-write": true,
"no-eval": true,
"no-exec-script": true,
"no-function-constructor-with-string-args": false, // use tslint function-constructor rule intsead
"no-http-string": [true, "http://www.example.com/?.*", "http://localhost:?.*"],
"no-inner-html": true,
"no-octal-literal": true,
"no-string-based-set-immediate": true,
"no-string-based-set-interval": true,
"no-string-based-set-timeout": true,
"non-literal-fs-path": true,
"non-literal-require": true,
"possible-timing-attack": true,
"react-anchor-blank-noopener": true,
"react-iframe-missing-sandbox": true,
"react-no-dangerous-html": true,
/**
* Common Bugs and Correctness. The following rules should be turned on because they find
* common bug patterns in the code or enforce type safety.
*/
"await-promise": true,
"forin": true,
"increment-decrement": true,
"jquery-deferred-must-complete": true,
"label-position": true,
"match-default-export-name": true,
"mocha-avoid-only": true,
"mocha-no-side-effect-code": true,
"no-any": true,
"no-arg": true,
"no-backbone-get-set-outside-model": true,
"no-bitwise": true,
"no-conditional-assignment": true,
"no-console": [true, "debug", "info", "error", "log", "time", "timeEnd", "trace"],
"no-constant-condition": true,
"no-control-regex": true,
"no-debugger": true,
"no-duplicate-super": true,
"no-duplicate-switch-case": true,
"no-duplicate-variable": true,
"no-empty": true,
"no-floating-promises": true,
"no-for-in-array": true,
"no-implicit-dependencies": true,
"no-import-side-effect": true,
"no-increment-decrement": false, // use tslint increment-decrement rule instead
"no-invalid-regexp": true,
"no-invalid-template-strings": true,
"no-invalid-this": true,
"no-jquery-raw-elements": true,
"no-misused-new": true,
"no-non-null-assertion": true,
"no-object-literal-type-assertion": true,
"no-parameter-reassignment": true,
"no-reference-import": true,
"no-regex-spaces": true,
"no-sparse-arrays": true,
"no-string-literal": true,
"no-string-throw": true,
"no-submodule-imports": true,
"no-unnecessary-bind": false, // use tslint unnecessary-bind rule instead
"no-unnecessary-callback-wrapper": true,
"no-unnecessary-initializer": true,
"no-unnecessary-override": true,
"no-unsafe-any": true,
"no-unsafe-finally": true,
"no-unused-expression": true,
"no-use-before-declare": true,
"no-with-statement": true,
"promise-function-async": true,
"promise-must-complete": true,
"radix": true,
"react-this-binding-issue": true,
"react-unused-props-and-state": true,
"restrict-plus-operands": true, // the plus operand should really only be used for strings and numbers
"strict-boolean-expressions": true,
"switch-default": true,
"switch-final-break": true,
"triple-equals": [true, "allow-null-check"],
"unnecessary-bind": true,
"use-isnan": true,
"use-named-parameter": true,
"use-simple-attributes": true,
/**
* Code Clarity. The following rules should be turned on because they make the code
* generally more clear to the reader.
*/
"adjacent-overload-signatures": true,
"array-type": [true, "array"],
"arrow-parens": false, // for simple functions the parens on arrow functions are not needed
"ban-comma-operator": true, // possibly controversial
"binary-expression-operand-order": true,
"callable-types": true,
"chai-prefer-contains-to-index-of": true,
"chai-vague-errors": true,
"class-name": true,
"comment-format": true,
"completed-docs": [true, "classes"],
"export-name": true,
"file-name-casing": true,
"function-name": true,
"import-name": true,
"informative-docs": true,
"interface-name": true,
"jsdoc-format": true,
"max-classes-per-file": [true, 3], // we generally recommend making one public class per file
"max-file-line-count": true,
"max-func-body-length": [true, 100, { "ignore-parameters-to-function-regex": "^describe$" }],
"max-line-length": [true, 140],
"member-access": true,
"member-ordering": [true, { "order": "fields-first" }],
"mocha-unneeded-done": true,
"new-parens": true,
"newline-per-chained-call": true,
"no-construct": true,
"no-default-export": true,
"no-duplicate-imports": true,
"no-dynamic-delete": true,
"no-empty-interface": true,
"no-for-in": true,
"no-function-expression": true,
"no-inferrable-types": false, // turn no-inferrable-types off in order to make the code consistent in its use of type decorations
"no-multiline-string": false,
"no-null-keyword": true,
"no-parameter-properties": true,
"no-redundant-jsdoc": true,
"no-relative-imports": true,
"no-require-imports": true,
"no-return-await": true,
"no-shadowed-variable": true,
"no-suspicious-comment": true,
"no-this-assignment": true,
"no-typeof-undefined": true,
"no-unnecessary-field-initialization": true,
"no-unnecessary-local-variable": true,
"no-unnecessary-qualifier": true,
"no-unnecessary-type-assertion": true,
"no-unsupported-browser-code": true,
"no-useless-files": true,
"no-var-keyword": true,
"no-var-requires": true,
"no-void-expression": true,
"number-literal-format": true,
"object-literal-sort-keys": false, // turn object-literal-sort-keys off and sort keys in a meaningful manner
"one-variable-per-declaration": true,
"only-arrow-functions": false, // there are many valid reasons to declare a function
"ordered-imports": true,
"prefer-array-literal": true,
"prefer-const": true,
"prefer-for-of": true,
"prefer-method-signature": true,
"prefer-object-spread": true,
"prefer-readonly": true,
"prefer-template": true,
"prefer-while": true,
"type-literal-delimiter": true,
"typedef": [true, "call-signature", "arrow-call-signature", "parameter", "arrow-parameter", "property-declaration", "variable-declaration", "member-variable-declaration"],
"underscore-consistent-invocation": true,
"unified-signatures": true,
"use-default-type-parameter": true,
"variable-name": true,
"void-zero": true,
/**
* Accessibility. The following rules should be turned on to guarantee the best user
* experience for keyboard and screen reader users.
*/
"react-a11y-accessible-headings": true,
"react-a11y-anchors": true,
"react-a11y-aria-unsupported-elements": true,
"react-a11y-event-has-role": true,
"react-a11y-image-button-has-alt": true,
"react-a11y-img-has-alt": true,
"react-a11y-input-elements": true,
"react-a11y-lang": true,
"react-a11y-meta": true,
"react-a11y-no-onchange": true,
"react-a11y-props": true,
"react-a11y-proptypes": true,
"react-a11y-required": true,
"react-a11y-role": true,
"react-a11y-role-has-required-aria-props": true,
"react-a11y-role-supports-aria-props": true,
"react-a11y-tabindex-no-positive": true,
"react-a11y-titles": true,
/**
* Whitespace related rules. The only recommended whitespace strategy is to pick a single format and
* be consistent.
*/
"align": [true, "parameters", "arguments", "statements"],
"curly": true,
"encoding": true,
"eofline": true,
"import-spacing": true,
"indent": [true, "spaces"],
"linebreak-style": true,
"newline-before-return": true,
"no-consecutive-blank-lines": true,
"no-empty-line-after-opening-brace": false,
"no-irregular-whitespace": true,
"no-single-line-block-comment": true,
"no-trailing-whitespace": true,
"no-unnecessary-semicolons": true,
"object-literal-key-quotes": [true, "as-needed"],
"one-line": [true, "check-open-brace", "check-catch", "check-else", "check-whitespace"],
"quotemark": [true, "single"],
"semicolon": [true, "always"],
"space-within-parens": true,
"trailing-comma": [true, { "singleline": "never", "multiline": "never" }], // forcing trailing commas for multi-line
// lists results in lists that are easier to reorder and version control diffs that are more clear.
// Many teams like to have multiline be "always". There is no clear consensus on this rule but the
// internal MS JavaScript coding standard does discourage it.
"typedef-whitespace": false,
"whitespace": [true, "check-branch", "check-decl", "check-operator", "check-separator", "check-type"],
/**
* Controversial/Configurable rules.
*/
"ban": false, // only enable this if you have some code pattern that you want to ban
"ban-types": true,
"cyclomatic-complexity": true,
"deprecation": false, // deprecated APIs are sometimes unavoidable
"file-header": false, // enable this rule only if you are legally required to add a file header
"import-blacklist": false, // enable and configure this as you desire
"interface-over-type-literal": false, // there are plenty of reasons to prefer interfaces
"no-angle-bracket-type-assertion": false, // pick either type-cast format and use it consistently
"no-inferred-empty-object-type": false, // if the compiler is satisfied then this is probably not an issue
"no-internal-module": false, // only enable this if you are not using internal modules
"no-magic-numbers": false, // by default it will find too many false positives
"no-mergeable-namespace": false, // your project may require mergeable namespaces
"no-namespace": false, // only enable this if you are not using modules/namespaces
"no-reference": true, // in general you should use a module system and not /// reference imports
"no-unexternalized-strings": false, // the VS Code team has a specific localization process that this rule enforces
"object-literal-shorthand": false, // object-literal-shorthand offers an abbreviation not an abstraction
"prefer-conditional-expression": false, // unnecessarily strict
"prefer-switch": false, // more of a style preference
"prefer-type-cast": true, // pick either type-cast format and use it consistently
"return-undefined": false, // this actually affects the readability of the code
"space-before-function-paren": false, // turn this on if this is really your coding standard
/**
* Deprecated rules. The following rules are deprecated for various reasons.
*/
"missing-jsdoc": false,
"missing-optional-annotation": false, // now supported by TypeScript compiler
"no-duplicate-case": false,
"no-duplicate-parameter-names": false, // now supported by TypeScript compiler
"no-empty-interfaces": false, // use tslint no-empty-interface rule instead
"no-missing-visibility-modifiers": false, // use tslint member-access rule instead
"no-multiple-var-decl": false, // use tslint one-variable-per-declaration rule instead
"no-reserved-keywords": false,
"no-stateless-class": false,
"no-switch-case-fall-through": false, // now supported by TypeScript compiler
"no-unnecessary-class": true,
"no-var-self": false,
"react-tsx-curly-spacing": false,
"typeof-compare": false, // the valid-typeof rule is currently superior to this version
"valid-typeof": false
}
}