diff --git a/.codeclimate.yml b/.codeclimate.yml index dc20aff..69f051b 100644 --- a/.codeclimate.yml +++ b/.codeclimate.yml @@ -7,5 +7,5 @@ ratings: paths: - "**.js" exclude_paths: -- "test" -- "node_modules" +- "node_modules/" +- "test/fixtures/" diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index 9221332..0000000 --- a/.eslintrc +++ /dev/null @@ -1,213 +0,0 @@ -ecmaFeatures: - modules: true - jsx: true - -env: - amd: true - browser: true - es6: true - jquery: true - node: true - -# http://eslint.org/docs/rules/ -rules: - # Possible Errors - comma-dangle: 0 - no-cond-assign: 2 - no-console: 0 - no-constant-condition: 2 - no-control-regex: 2 - no-debugger: 2 - no-dupe-args: 2 - no-dupe-keys: 2 - no-duplicate-case: 2 - no-empty: 2 - no-empty-character-class: 2 - no-ex-assign: 2 - no-extra-boolean-cast: 2 - no-extra-parens: 0 - no-extra-semi: 2 - no-func-assign: 2 - no-inner-declarations: [2, functions] - no-invalid-regexp: 2 - no-irregular-whitespace: 2 - no-negated-in-lhs: 2 - no-obj-calls: 2 - no-regex-spaces: 2 - no-sparse-arrays: 2 - no-unexpected-multiline: 2 - no-unreachable: 2 - use-isnan: 2 - valid-jsdoc: 0 - valid-typeof: 2 - - # Best Practices - accessor-pairs: 2 - block-scoped-var: 0 - complexity: [2, 6] - consistent-return: 0 - curly: 0 - default-case: 0 - dot-location: 0 - dot-notation: 0 - eqeqeq: 2 - guard-for-in: 2 - no-alert: 2 - no-caller: 2 - no-case-declarations: 2 - no-div-regex: 2 - no-else-return: 0 - no-empty-label: 2 - no-empty-pattern: 2 - no-eq-null: 2 - no-eval: 2 - no-extend-native: 2 - no-extra-bind: 2 - no-fallthrough: 2 - no-floating-decimal: 0 - no-implicit-coercion: 0 - no-implied-eval: 2 - no-invalid-this: 0 - no-iterator: 2 - no-labels: 0 - no-lone-blocks: 2 - no-loop-func: 2 - no-magic-number: 0 - no-multi-spaces: 0 - no-multi-str: 0 - no-native-reassign: 2 - no-new-func: 2 - no-new-wrappers: 2 - no-new: 2 - no-octal-escape: 2 - no-octal: 2 - no-proto: 2 - no-redeclare: 2 - no-return-assign: 2 - no-script-url: 2 - no-self-compare: 2 - no-sequences: 0 - no-throw-literal: 0 - no-unused-expressions: 2 - no-useless-call: 2 - no-useless-concat: 2 - no-void: 2 - no-warning-comments: 0 - no-with: 2 - radix: 2 - vars-on-top: 0 - wrap-iife: 2 - yoda: 0 - - # Strict - strict: 0 - - # Variables - init-declarations: 0 - no-catch-shadow: 2 - no-delete-var: 2 - no-label-var: 2 - no-shadow-restricted-names: 2 - no-shadow: 0 - no-undef-init: 2 - no-undef: 0 - no-undefined: 0 - no-unused-vars: 0 - no-use-before-define: 0 - - # Node.js and CommonJS - callback-return: 2 - global-require: 2 - handle-callback-err: 2 - no-mixed-requires: 0 - no-new-require: 0 - no-path-concat: 2 - no-process-exit: 2 - no-restricted-modules: 0 - no-sync: 0 - - # Stylistic Issues - array-bracket-spacing: 0 - block-spacing: 0 - brace-style: 0 - camelcase: 0 - comma-spacing: 0 - comma-style: 0 - computed-property-spacing: 0 - consistent-this: 0 - eol-last: 0 - func-names: 0 - func-style: 0 - id-length: 0 - id-match: 0 - indent: 0 - jsx-quotes: 0 - key-spacing: 0 - linebreak-style: 0 - lines-around-comment: 0 - max-depth: 0 - max-len: 0 - max-nested-callbacks: 0 - max-params: 0 - max-statements: [2, 30] - new-cap: 0 - new-parens: 0 - newline-after-var: 0 - no-array-constructor: 0 - no-bitwise: 0 - no-continue: 0 - no-inline-comments: 0 - no-lonely-if: 0 - no-mixed-spaces-and-tabs: 0 - no-multiple-empty-lines: 0 - no-negated-condition: 0 - no-nested-ternary: 0 - no-new-object: 0 - no-plusplus: 0 - no-restricted-syntax: 0 - no-spaced-func: 0 - no-ternary: 0 - no-trailing-spaces: 0 - no-underscore-dangle: 0 - no-unneeded-ternary: 0 - object-curly-spacing: 0 - one-var: 0 - operator-assignment: 0 - operator-linebreak: 0 - padded-blocks: 0 - quote-props: 0 - quotes: 0 - require-jsdoc: 0 - semi-spacing: 0 - semi: 0 - sort-vars: 0 - space-after-keywords: 0 - space-before-blocks: 0 - space-before-function-paren: 0 - space-before-keywords: 0 - space-in-parens: 0 - space-infix-ops: 0 - space-return-throw-case: 0 - space-unary-ops: 0 - spaced-comment: 0 - wrap-regex: 0 - - # ECMAScript 6 - arrow-body-style: 0 - arrow-parens: 0 - arrow-spacing: 0 - constructor-super: 0 - generator-star-spacing: 0 - no-arrow-condition: 0 - no-class-assign: 0 - no-const-assign: 0 - no-dupe-class-members: 0 - no-this-before-super: 0 - no-var: 0 - object-shorthand: 0 - prefer-arrow-callback: 0 - prefer-const: 0 - prefer-reflect: 0 - prefer-spread: 0 - prefer-template: 0 - require-yield: 0 diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..d59da74 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,25 @@ +module.exports = { + "env": { + "node": true, // When in a backend context + "es6": true, + }, + "rules": { + "brace-style": [2, "1tbs", { "allowSingleLine": true }], + "comma-style": [2, "first", { exceptions: {ArrayExpression: true, ObjectExpression: true} }], + "complexity": [2, 6], + "curly": 2, + "eqeqeq": [2, "allow-null"], + "no-shadow-restricted-names": 2, + "no-undef": 2, + "no-use-before-define": 2, + "radix": 2, + "semi": 2, + "space-infix-ops": 2, + "strict": 0, + }, + /** + * globals should be defined per file when possible. Use the directive here + * when there are project-level globals (such as jquery) + */ + "globals": {}, +}; diff --git a/bin/fixme b/bin/fixme index 80c9c04..f60c1c9 100755 --- a/bin/fixme +++ b/bin/fixme @@ -5,6 +5,9 @@ var FixMe = require('../lib/fix-me'); var config; fs.readFile('/config.json', function(err, data) { - if (!err) config = JSON.parse(data); + if (!err) { + config = JSON.parse(data); + } + new FixMe().run(config) }); diff --git a/lib/fix-me.js b/lib/fix-me.js index e6c995c..cd94956 100644 --- a/lib/fix-me.js +++ b/lib/fix-me.js @@ -32,8 +32,8 @@ FixMe.prototype.run = function(engineConfig) { strings = DEFAULT_STRINGS; } - this.find(paths, strings) -} + this.find(paths, strings); +}; FixMe.prototype.find = function(paths, strings, callback) { var pattern = `(${strings.join('|')})`; @@ -61,7 +61,9 @@ FixMe.prototype.find = function(paths, strings, callback) { this.output.write(JSON.stringify(issue) + '\0'); }); - if (callback) grep.stdout.on('close', _ => callback()); -} + if (callback) { + grep.stdout.on('close', _ => callback()); + } +}; module.exports = FixMe; diff --git a/test/fix-me.js b/test/fix-me.js index 44b4d90..8cad9c9 100644 --- a/test/fix-me.js +++ b/test/fix-me.js @@ -1,7 +1,8 @@ +/* global define, it, describe, context */ + var expect = require('chai').expect; -var stream = require('stream'); -var util = require('util'); var FixMe = require('../lib/fix-me.js'); +var IssueBuffer = require('./support/issue_buffer'); describe("fixMe", function(){ describe("#run(engineConfig)", function() { @@ -12,7 +13,7 @@ describe("fixMe", function(){ engine.find = function(_, strings) { expect(strings).to.have.members(['BUG', 'FIXME', 'HACK', 'TODO', 'XXX']); done(); - } + }; engine.run(); }); @@ -23,7 +24,7 @@ describe("fixMe", function(){ engine.find = function(paths) { expect(paths).to.have.members(['./']); done(); - } + }; engine.run(); }); @@ -36,9 +37,9 @@ describe("fixMe", function(){ }; engine.find = function(paths) { - expect(paths).to.have.members(['test/fixtures/code/src/code/test.js']) + expect(paths).to.have.members(['test/fixtures/code/src/code/test.js']); done(); - } + }; engine.run(config); }); @@ -54,7 +55,7 @@ describe("fixMe", function(){ engine.find = function(_, strings) { expect(strings).to.have.members(['SUP']); done(); - } + }; engine.run(engineConfig); }); @@ -68,7 +69,7 @@ describe("fixMe", function(){ engine.find(['test/fixtures/file.js'], ['TODO', 'SUP'], function() { var issues = buf.toIssues(); - expect(issues.length).to.eq(2) + expect(issues.length).to.eq(2); expect(issues[0].categories).to.have.members(['Bug Risk']); expect(issues[0].check_name).to.eq('TODO'); @@ -142,20 +143,3 @@ describe("fixMe", function(){ }); }); }); - -function IssueBuffer() { - this._data = ""; - stream.Writable.call(this); -} - -util.inherits(IssueBuffer, stream.Writable); - -IssueBuffer.prototype._write = function(chunk, encoding, done) { - this._data += chunk.toString(); - done(); -}; - -IssueBuffer.prototype.toIssues = function() { - if (this._data.length === 0) return []; - return this._data.slice(0, -1).split('\0').map((json) => JSON.parse(json)); -} diff --git a/test/support/issue_buffer.js b/test/support/issue_buffer.js new file mode 100644 index 0000000..b1a976e --- /dev/null +++ b/test/support/issue_buffer.js @@ -0,0 +1,24 @@ +var stream = require('stream'); +var util = require('util'); + +function IssueBuffer() { + this._data = ""; + stream.Writable.call(this); +} + +util.inherits(IssueBuffer, stream.Writable); + +IssueBuffer.prototype._write = function(chunk, encoding, done) { + this._data += chunk.toString(); + done(); +}; + +IssueBuffer.prototype.toIssues = function() { + if (this._data.length === 0) { + return []; + } + + return this._data.slice(0, -1).split('\0').map((json) => JSON.parse(json)); +}; + +module.exports = IssueBuffer;