From 08d1af3e23b840bd2fb22b8d632b64d8dc9293a8 Mon Sep 17 00:00:00 2001 From: Estelle DeBlois Date: Tue, 14 Apr 2015 12:30:45 -0400 Subject: [PATCH] Better linting * Update jshint tests to also check blueprint files * Add jscs mocha tests * Add a custom `Brocfile.js` to allow linting with `ember build --watch` * Fix some existing files to comply with linting rules --- .jscsrc | 77 +++++++++++++++++++ Brocfile.js | 12 +++ .../node-webkit/files/config/environment.js | 1 - .../files/vendor/node-webkit/reload.js | 3 +- .../files/vendor/node-webkit/shim.js | 3 +- lib/commands/nw-package.js | 11 ++- package.json | 6 +- tests/mocha-jscs-test.js | 3 + tests/mocha-jshint-test.js | 2 +- 9 files changed, 110 insertions(+), 8 deletions(-) create mode 100644 .jscsrc create mode 100644 Brocfile.js create mode 100644 tests/mocha-jscs-test.js diff --git a/.jscsrc b/.jscsrc new file mode 100644 index 0000000..6e00ba8 --- /dev/null +++ b/.jscsrc @@ -0,0 +1,77 @@ +{ + "requireBlocksOnNewline": 1, + "requireCamelCaseOrUpperCaseIdentifiers": true, + "requireCapitalizedConstructors": true, + "requireCommaBeforeLineBreak": true, + "requireCurlyBraces": [ + "if", + "else", + "for", + "while", + "do", + "try", + "catch" + ], + "requireDotNotation": true, + "requireLineBreakAfterVariableAssignment": true, + "requireLineFeedAtFileEnd": true, + "requireOperatorBeforeLineBreak": true, + "requirePaddingNewLinesAfterBlocks": true, + "requireSemicolons": true, + "requireSpaceAfterBinaryOperators": true, + "requireSpaceAfterKeywords": [ + "do", + "for", + "if", + "else", + "switch", + "case", + "try", + "catch", + "void", + "while", + "with", + "return", + "typeof" + ], + "requireSpaceAfterLineComment": true, + "requireSpaceBeforeBinaryOperators": true, + "requireSpaceBeforeBlockStatements": true, + "requireSpaceBeforeKeywords": [ + "else", + "while", + "catch" + ], + "requireSpaceBeforeObjectValues": true, + "requireSpaceBetweenArguments": true, + "requireSpacesInAnonymousFunctionExpression": { + "beforeOpeningCurlyBrace": true + }, + "requireSpacesInConditionalExpression": true, + "requireSpacesInForStatement": true, + "requireSpacesInFunction": { + "beforeOpeningCurlyBrace": true + }, + "requireSpacesInsideObjectBrackets": "all", + "disallowKeywordsOnNewLine": ["else"], + "disallowMixedSpacesAndTabs": true, + "disallowMultipleLineBreaks": true, + "disallowMultipleVarDecl": true, + "disallowNewlineBeforeBlockStatements": true, + "disallowOperatorBeforeLineBreak": ["+", "."], + "disallowPaddingNewlinesInBlocks": true, + "disallowSpaceAfterObjectKeys": true, + "disallowSpaceAfterPrefixUnaryOperators": ["++", "--", "+", "-", "~", "!"], + "disallowSpaceBeforePostfixUnaryOperators": ["++", "--"], + "disallowSpacesInCallExpression": true, + "disallowSpacesInNamedFunctionExpression": { + "beforeOpeningRoundBrace": true + }, + "disallowSpacesInsideParentheses": true, + "disallowTrailingComma": true, + "disallowTrailingWhitespace": true, + "disallowYodaConditions": true, + "validateIndentation": 2, + "validateLineBreaks": "LF", + "validateParameterSeparator": ", " +} diff --git a/Brocfile.js b/Brocfile.js new file mode 100644 index 0000000..65e77b6 --- /dev/null +++ b/Brocfile.js @@ -0,0 +1,12 @@ +var jscs = require('broccoli-jscs'); +var jshint = require('broccoli-jshint'); +var mergeTrees = require('broccoli-merge-trees'); + +var srcTree = mergeTrees(['lib', 'blueprints']); + +var jscsTree = jscs(srcTree); +jscsTree.description = 'JSCS'; + +var jshintTree = jshint(srcTree); + +module.exports = mergeTrees([jscsTree, jshintTree], { overwrite: true }); diff --git a/blueprints/node-webkit/files/config/environment.js b/blueprints/node-webkit/files/config/environment.js index 6e276de..1c8408b 100644 --- a/blueprints/node-webkit/files/config/environment.js +++ b/blueprints/node-webkit/files/config/environment.js @@ -40,7 +40,6 @@ module.exports = function(environment) { } if (environment === 'production') { - } return ENV; diff --git a/blueprints/node-webkit/files/vendor/node-webkit/reload.js b/blueprints/node-webkit/files/vendor/node-webkit/reload.js index 5bfeee1..e70aa7b 100644 --- a/blueprints/node-webkit/files/vendor/node-webkit/reload.js +++ b/blueprints/node-webkit/files/vendor/node-webkit/reload.js @@ -1,5 +1,6 @@ +/* jshint browser: true */ (function() { - if (!window.nwDispatcher) return; + if (!window.nwDispatcher) { return; } // Reload the page when anything in `dist` changes var fs = window.requireNode('fs'); diff --git a/blueprints/node-webkit/files/vendor/node-webkit/shim.js b/blueprints/node-webkit/files/vendor/node-webkit/shim.js index 6171d69..da18572 100644 --- a/blueprints/node-webkit/files/vendor/node-webkit/shim.js +++ b/blueprints/node-webkit/files/vendor/node-webkit/shim.js @@ -1,5 +1,6 @@ +/* jshint browser: true */ (function(window) { - if (!window.nwDispatcher) return; + if (!window.nwDispatcher) { return; } // Move `global.window` out of the way as it causes some third-party // libraries to expose themselves via `global` instead of `window`. diff --git a/lib/commands/nw-package.js b/lib/commands/nw-package.js index a5ebdf2..17d3e03 100644 --- a/lib/commands/nw-package.js +++ b/lib/commands/nw-package.js @@ -10,7 +10,7 @@ module.exports = { description: 'Packages your NW.js app', availableOptions: [ - { name: 'environment', type: String, default: 'production', aliases: ['e', { 'dev' : 'development' }, { 'prod' : 'production' }] }, + { name: 'environment', type: String, default: 'production', aliases: ['e', { 'dev': 'development' }, { 'prod': 'production' }] }, { name: 'output-path', type: String, default: 'dist/', aliases: ['o'] }, { name: 'config-file', type: String, default: 'config/nw-package.js', aliases: ['f'] } ], @@ -47,8 +47,13 @@ module.exports = { config = require(configFile); } - if (!config.buildDir) { config.buildDir = 'build/app'; } - if (!config.cacheDir) { config.cacheDir = 'build/cache'; } + if (!config.buildDir) { + config.buildDir = 'build/app'; + } + + if (!config.cacheDir) { + config.cacheDir = 'build/cache'; + } if (!config.files) { config.files = this.nwFiles(options); diff --git a/package.json b/package.json index d67b6b7..9c7af23 100644 --- a/package.json +++ b/package.json @@ -17,13 +17,17 @@ "rsvp": "^3.0.17" }, "devDependencies": { + "broccoli-jscs": "0.0.22", + "broccoli-jshint": "0.5.5", + "broccoli-merge-trees": "0.2.1", "chai": "^2.1.1", "chai-as-promised": "^4.3.0", "ember-cli": "0.2.0-beta.1", "glob": "^5.0.3", "mocha": "^2.2.1", + "mocha-jscs": "^1.0.2", "mocha-jshint": "^1.0.0", - "mock-spawn": "^0.2.4", + "mock-spawn": "0.2.4", "mockery": "^1.4.0", "sinon": "^1.14.1" }, diff --git a/tests/mocha-jscs-test.js b/tests/mocha-jscs-test.js new file mode 100644 index 0000000..92475d8 --- /dev/null +++ b/tests/mocha-jscs-test.js @@ -0,0 +1,3 @@ +var mochaJSCS = require('mocha-jscs'); + +mochaJSCS(['lib', 'blueprints']); diff --git a/tests/mocha-jshint-test.js b/tests/mocha-jshint-test.js index 0293707..3c3cc0c 100644 --- a/tests/mocha-jshint-test.js +++ b/tests/mocha-jshint-test.js @@ -1,3 +1,3 @@ var mochaJSHint = require('mocha-jshint'); -mochaJSHint(['lib']); +mochaJSHint(['lib', 'blueprints']);