From 3573d80ff8d8cbcfd18052217da2672e0124013e Mon Sep 17 00:00:00 2001 From: Rob Wise Date: Sat, 21 Nov 2015 02:36:10 -0500 Subject: [PATCH] Update linters to conform to ShakaCode standards This change is in parallel with the change made for the webpack tutorial. See https://github.com/shakacode/react-webpack-rails-tutorial/pull/159 - Fix generator linters templating logic for scss task - Remove unnecessary lodash import in generated loggerMiddleware - Exclude dummy apps from linting - Remove unnecessary 'refs' attribute in generated component - Add dummy apps to eslintignore --- .eslintignore | 2 + .eslintrc | 35 +++++++++++++++++- .jscsrc | 27 ++++++++++++-- .../base/base/lib/tasks/linters.rake.tt | 4 +- .../templates/js_linters/client/.eslintrc | 37 +++++++++++++++++-- .../templates/js_linters/client/.jscsrc | 19 ++++++++-- .../components/HelloWorldWidget.jsx | 2 +- .../app/lib/middlewares/loggerMiddleware.js | 1 - 8 files changed, 110 insertions(+), 17 deletions(-) diff --git a/.eslintignore b/.eslintignore index eced477999..b8446a3f05 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,3 +1,5 @@ node_modules coverage spec/react_on_rails/dummy-for-generators +spec/dummy +spec/dummy-react-013 diff --git a/.eslintrc b/.eslintrc index 79eb9fcd70..d73a8c023b 100644 --- a/.eslintrc +++ b/.eslintrc @@ -6,12 +6,43 @@ extends: eslint-config-airbnb plugins: - react +globals: + __DEBUG_SERVER_ERRORS__: true + __SERVER_ERRORS__: true + env: browser: true node: true + mocha: true rules: + ### Variables + no-undef: 2 + no-unused-vars: [2, { vars: all, args: none }] + + ### Stylistic issues indent: [1, 2, { SwitchCase: 1, VariableDeclarator: 2 }] - react/sort-comp: 0 - react/jsx-quotes: 0 id-length: [1, { min: 2, exceptions: [_, e, i, k, v] }] + + ### React + jsx-quotes: [1, prefer-double] + react/display-name: 0 + react/jsx-boolean-value: [1, always] + react/jsx-curly-spacing: [1, never] + react/jsx-no-duplicate-props: [2, { ignoreCase: true }] + react/jsx-no-undef: 2 + react/jsx-sort-prop-types: 0 + react/jsx-sort-props: 0 + react/jsx-uses-react: 2 + react/jsx-uses-vars: 2 + react/no-danger: 0 + react/no-did-mount-set-state: 1 + react/no-did-update-set-state: 0 + react/no-multi-comp: 2 + react/no-unknown-property: 2 + react/prop-types: 1 + react/react-in-jsx-scope: 2 + react/require-extension: [1, { extensions: [.js, .jsx] }] + react/self-closing-comp: 2 + react/sort-comp: 0 # Should be 1. `statics` should be on top. + react/wrap-multilines: 2 diff --git a/.jscsrc b/.jscsrc index 3243a9e9bb..4e57c2bc57 100644 --- a/.jscsrc +++ b/.jscsrc @@ -1,7 +1,26 @@ { "preset": "airbnb", - "fileExtensions": [".js", ".jsx"], - "excludeFiles": ["**/build/**", "**/node_modules/**", "**/generated/**", "**/docs/**", "**/tmp/**", "**/sample_generated/**", "**/coverage/**", "**/vendor/**", "**/dummy-for-generators/**"], - "requireTrailingComma": { "ignoreSingleValue": true, "ignoreSingleLine": true }, - "validateQuoteMarks": false + "fileExtensions": [ + ".js", + ".jsx" + ], + "excludeFiles": [ + "**/build/**", + "**/node_modules/**", + "**/generated/**", + "**/docs/**", + "**/tmp/**", + "**/sample_generated/**", + "**/coverage/**", + "**/vendor/**", + "**/dummy-for-generators/**", + "**/dummy/**", + "**/dummy-react-013/**" + ], + "esprima": "babel-jscs", + "validateQuoteMarks": { + "mark": "'", + "escape": true, + "ignoreJSX": true + } } diff --git a/lib/generators/react_on_rails/templates/base/base/lib/tasks/linters.rake.tt b/lib/generators/react_on_rails/templates/base/base/lib/tasks/linters.rake.tt index f4d7a43dce..867d9d6fb4 100644 --- a/lib/generators/react_on_rails/templates/base/base/lib/tasks/linters.rake.tt +++ b/lib/generators/react_on_rails/templates/base/base/lib/tasks/linters.rake.tt @@ -76,8 +76,8 @@ if %w(development test).include? Rails.env <%- end -%> <%- enabled_linters = [] -%> - <%- enabled_linters << %i(rubocop ruby) if options.ruby_linters? -%> - <%- enabled_linters << %i(js scss) unless options.skip_js_linters? -%> + <%- enabled_linters << %i(rubocop ruby scss) if options.ruby_linters? -%> + <%- enabled_linters << %i(js) unless options.skip_js_linters? -%> task lint: <%= enabled_linters.flatten %> do puts "Completed all linting" end diff --git a/lib/generators/react_on_rails/templates/js_linters/client/.eslintrc b/lib/generators/react_on_rails/templates/js_linters/client/.eslintrc index 9a03ae6dce..d73a8c023b 100644 --- a/lib/generators/react_on_rails/templates/js_linters/client/.eslintrc +++ b/lib/generators/react_on_rails/templates/js_linters/client/.eslintrc @@ -6,12 +6,43 @@ extends: eslint-config-airbnb plugins: - react +globals: + __DEBUG_SERVER_ERRORS__: true + __SERVER_ERRORS__: true + env: browser: true node: true + mocha: true rules: + ### Variables + no-undef: 2 + no-unused-vars: [2, { vars: all, args: none }] + + ### Stylistic issues indent: [1, 2, { SwitchCase: 1, VariableDeclarator: 2 }] - react/sort-comp: 0 - react/jsx-quotes: 1 - id-length: [2, {"exceptions": ["e", "i", "_"]}] + id-length: [1, { min: 2, exceptions: [_, e, i, k, v] }] + + ### React + jsx-quotes: [1, prefer-double] + react/display-name: 0 + react/jsx-boolean-value: [1, always] + react/jsx-curly-spacing: [1, never] + react/jsx-no-duplicate-props: [2, { ignoreCase: true }] + react/jsx-no-undef: 2 + react/jsx-sort-prop-types: 0 + react/jsx-sort-props: 0 + react/jsx-uses-react: 2 + react/jsx-uses-vars: 2 + react/no-danger: 0 + react/no-did-mount-set-state: 1 + react/no-did-update-set-state: 0 + react/no-multi-comp: 2 + react/no-unknown-property: 2 + react/prop-types: 1 + react/react-in-jsx-scope: 2 + react/require-extension: [1, { extensions: [.js, .jsx] }] + react/self-closing-comp: 2 + react/sort-comp: 0 # Should be 1. `statics` should be on top. + react/wrap-multilines: 2 diff --git a/lib/generators/react_on_rails/templates/js_linters/client/.jscsrc b/lib/generators/react_on_rails/templates/js_linters/client/.jscsrc index c97c7f763b..8b5c14e285 100644 --- a/lib/generators/react_on_rails/templates/js_linters/client/.jscsrc +++ b/lib/generators/react_on_rails/templates/js_linters/client/.jscsrc @@ -1,7 +1,18 @@ { "preset": "airbnb", - "fileExtensions": [".js", ".jsx"], - "excludeFiles": ["build/**", "node_modules/**"], - - "validateQuoteMarks": null // Issue with JSX quotemarks: https://github.com/jscs-dev/babel-jscs/issues/12 + "fileExtensions": [ + ".js", + ".jsx" + ], + "excludeFiles": [ + "assets/**", + "build/**", + "node_modules/**" + ], + "esprima": "babel-jscs", + "validateQuoteMarks": { + "mark": "'", + "escape": true, + "ignoreJSX": true + } } diff --git a/lib/generators/react_on_rails/templates/no_redux/base/client/app/bundles/HelloWorld/components/HelloWorldWidget.jsx b/lib/generators/react_on_rails/templates/no_redux/base/client/app/bundles/HelloWorld/components/HelloWorldWidget.jsx index 2ef55aa2e3..b6916f85a6 100644 --- a/lib/generators/react_on_rails/templates/no_redux/base/client/app/bundles/HelloWorld/components/HelloWorldWidget.jsx +++ b/lib/generators/react_on_rails/templates/no_redux/base/client/app/bundles/HelloWorld/components/HelloWorldWidget.jsx @@ -31,7 +31,7 @@ export default class HelloWorldWidget extends React.Component {

Say hello to: - +

); diff --git a/lib/generators/react_on_rails/templates/redux/base/client/app/lib/middlewares/loggerMiddleware.js b/lib/generators/react_on_rails/templates/redux/base/client/app/lib/middlewares/loggerMiddleware.js index c3a30cb73e..1253fe1fb1 100644 --- a/lib/generators/react_on_rails/templates/redux/base/client/app/lib/middlewares/loggerMiddleware.js +++ b/lib/generators/react_on_rails/templates/redux/base/client/app/lib/middlewares/loggerMiddleware.js @@ -1,5 +1,4 @@ /* eslint no-console: 0 */ -import _ from 'lodash'; // This logger should be configured not to run in a production environment. // See https://github.com/petehunt/webpack-howto#6-feature-flags for you might turn this off for production.