Merge pull request #273 from clark800/feature/eslint

[TASK] Add eslint enforcement to travis.yml
This commit is contained in:
wltsmrz
2015-02-23 17:50:41 -08:00
5 changed files with 190 additions and 108 deletions

View File

@@ -1,6 +1,9 @@
language: node_js
node_js:
- "0.10"
before_script:
- npm install -g eslint
- eslint --reset -c ./eslintrc $(git --no-pager diff --name-only --relative FETCH_HEAD $(git merge-base FETCH_HEAD origin/HEAD) | grep "\.js$")
script: MOCHA_REPORTER=tap npm test --coverage
after_success:
- npm run coveralls

View File

@@ -1,3 +1,4 @@
'use strict';
var gulp = require('gulp');
var gutil = require('gulp-util');
var watch = require('gulp-watch');
@@ -8,21 +9,14 @@ var concat = require('gulp-concat');
var uglify = require('gulp-uglify');
var rename = require('gulp-rename');
var webpack = require('webpack');
var map = require('map-stream');
var bump = require('gulp-bump');
var react = require('gulp-react');
var flow = require('gulp-flowtype');
var argv = require('yargs').argv;
//var header = require('gulp-header');
// var header = require('gulp-header');
var pkg = require('./package.json');
var banner = '/*! <%= pkg.name %> - v<%= pkg.version %> - '
+ '<%= new Date().toISOString() %>\n'
+ '<%= pkg.homepage ? "* " + pkg.homepage + "\n" : "" %>'
+ '* Copyright (c) <%= new Date().getFullYear() %> <%= pkg.author.name %>;'
+ ' Licensed <%= pkg.license %> */'
var sjclSrc = [
'src/js/sjcl/core/sjcl.js',
'src/js/sjcl/core/aes.js',
@@ -66,33 +60,33 @@ gulp.task('concat-sjcl', function() {
.pipe(gulp.dest('./build/'));
});
gulp.task('build', [ 'concat-sjcl' ], function(callback) {
gulp.task('build', ['concat-sjcl'], function(callback) {
webpack({
cache: true,
entry: './src/js/ripple/index.js',
output: {
library: 'ripple',
path: './build/',
filename: [ 'ripple-', '.js' ].join(pkg.version)
},
filename: ['ripple-', '.js'].join(pkg.version)
}
}, callback);
});
gulp.task('build-min', [ 'build' ], function(callback) {
return gulp.src([ './build/ripple-', '.js' ].join(pkg.version))
gulp.task('build-min', ['build'], function() {
return gulp.src(['./build/ripple-', '.js'].join(pkg.version))
.pipe(uglify())
.pipe(rename([ 'ripple-', '-min.js' ].join(pkg.version)))
.pipe(rename(['ripple-', '-min.js'].join(pkg.version)))
.pipe(gulp.dest('./build/'));
});
gulp.task('build-debug', [ 'concat-sjcl' ], function(callback) {
gulp.task('build-debug', ['concat-sjcl'], function(callback) {
webpack({
cache: true,
entry: './src/js/ripple/index.js',
output: {
library: 'ripple',
path: './build/',
filename: [ 'ripple-', '-debug.js' ].join(pkg.version)
filename: ['ripple-', '-debug.js'].join(pkg.version)
},
debug: true,
devtool: 'eval'
@@ -105,11 +99,12 @@ gulp.task('build-debug', [ 'concat-sjcl' ], function(callback) {
*/
function buildUseError(cons) {
return 'var {<CONS>:function(){throw new Error("Class is unavailable in this build: <CONS>")}}'
.replace(new RegExp('<CONS>', 'g'), cons);
};
return ('var {<CONS>:function(){throw new Error('
+ '"Class is unavailable in this build: <CONS>")}}')
.replace(new RegExp('<CONS>', 'g'), cons);
}
gulp.task('build-core', [ 'concat-sjcl' ], function(callback) {
gulp.task('build-core', ['concat-sjcl'], function(callback) {
webpack({
entry: [
'./src/js/ripple/remote.js'
@@ -125,7 +120,7 @@ gulp.task('build-core', [ 'concat-sjcl' ], function(callback) {
output: {
library: 'ripple',
path: './build/',
filename: [ 'ripple-', '-core.js' ].join(pkg.version)
filename: ['ripple-', '-core.js'].join(pkg.version)
},
plugins: [
new webpack.optimize.UglifyJsPlugin()
@@ -133,34 +128,35 @@ gulp.task('build-core', [ 'concat-sjcl' ], function(callback) {
}, callback);
});
gulp.task('bower-build', [ 'build' ], function(callback) {
return gulp.src([ './build/ripple-', '.js' ].join(pkg.version))
gulp.task('bower-build', ['build'], function() {
return gulp.src(['./build/ripple-', '.js'].join(pkg.version))
.pipe(rename('ripple.js'))
.pipe(gulp.dest('./dist/'));
});
gulp.task('bower-build-min', [ 'build-min' ], function(callback) {
return gulp.src([ './build/ripple-', '-min.js' ].join(pkg.version))
gulp.task('bower-build-min', ['build-min'], function() {
return gulp.src(['./build/ripple-', '-min.js'].join(pkg.version))
.pipe(rename('ripple-min.js'))
.pipe(gulp.dest('./dist/'));
});
gulp.task('bower-build-debug', [ 'build-debug' ], function(callback) {
return gulp.src([ './build/ripple-', '-debug.js' ].join(pkg.version))
gulp.task('bower-build-debug', ['build-debug'], function() {
return gulp.src(['./build/ripple-', '-debug.js'].join(pkg.version))
.pipe(rename('ripple-debug.js'))
.pipe(gulp.dest('./dist/'));
});
gulp.task('bower-version', function() {
gulp.src('./dist/bower.json')
.pipe(bump({ version: pkg.version }))
.pipe(bump({version: pkg.version}))
.pipe(gulp.dest('./dist/'));
});
gulp.task('bower', ['bower-build', 'bower-build-min', 'bower-build-debug', 'bower-version']);
gulp.task('bower', ['bower-build', 'bower-build-min', 'bower-build-debug',
'bower-version']);
gulp.task('watch', function() {
gulp.watch('src/js/ripple/*', [ 'build-debug' ]);
gulp.watch('src/js/ripple/*', ['build-debug']);
});
// To use this, each javascript file must have /* @flow */ on the first line
@@ -177,25 +173,25 @@ gulp.task('strip', function() {
.pipe(watch('src/js/ripple/*.js'))
.pipe(cleanDest('out')) // delete outdated output file before stripping
.pipe(plumber()) // prevent an error in one file from ending build
.pipe(react({ stripTypes: true }).on('error', logPluginError))
.pipe(react({stripTypes: true}).on('error', logPluginError))
.pipe(filelog())
.pipe(gulp.dest('out'));
});
gulp.task('version-bump', function() {
if (!argv.type) {
throw new Error("No type found, pass it in using the --type argument");
throw new Error('No type found, pass it in using the --type argument');
}
gulp.src('./package.json')
.pipe(bump({ type: argv.type }))
.pipe(bump({type: argv.type}))
.pipe(gulp.dest('./'));
});
gulp.task('version-beta', function() {
gulp.src('./package.json')
.pipe(bump({ version: pkg.version + '-beta' }))
.pipe(bump({version: pkg.version + '-beta'}))
.pipe(gulp.dest('./'));
});
gulp.task('default', [ 'concat-sjcl', 'build', 'build-debug', 'build-min' ]);
gulp.task('default', ['concat-sjcl', 'build', 'build-debug', 'build-min']);

View File

@@ -1,72 +0,0 @@
{
"env": {
"browser": true,
"node": true
},
"rules": {
"no-use-before-define": 1,
"no-undef": 1,
"no-unused-expressions": 1,
"no-unused-vars": 1,
"no-extend-native": 1,
"no-native-reassign": 1,
"no-trailing-spaces": 1,
"no-empty": 1,
"no-inner-declarations": 1,
"no-irregular-whitespace": 1,
"no-negated-in-lhs": 1,
"no-obj-calls": 1,
"no-reserved-keys": 1,
"no-sparse-arrays": 1,
"no-unreachable": 1,
"use-isnan": 1,
"valid-jsdoc": 1,
"valid-typeof": 1,
"block-scoped-var": 1,
"dot-notation": 1,
"semi": 1,
"curly": 1,
"eqeqeq": 1,
"no-else-return": 1,
"new-cap": 1,
"new-parens": 1,
"no-comma-dangle": 1,
"no-empty-label": 1,
"no-eval": 1,
"no-extra-bind": 1,
"no-fallthrough": 1,
"no-lone-blocks": 1,
"no-loop-func": 1,
"no-multi-spaces": 1,
"no-return-assign": 1,
"no-sequences": 1,
"no-with": 1,
"radix": 1,
"yoda": [ 1, "never" ],
"no-catch-shadow": 1,
"no-shadow-restricted-names": 1,
"no-delete-var": 1,
"no-undefined": 1,
"handle-callback-err": 1,
"brace-style": [ 1, "1tbs", { "allowSingleLine": false } ],
"comma-spacing": [ 1, { "before": false, "after": true } ],
"comma-style": [ 1, "last" ],
"consistent-this": [ 1, "self" ],
"func-style": [ 1, "declaration" ],
"key-spacing": [ 1, { "beforeColon": false, "afterColon": true } ],
"max-nested-callbacks": [ 1, 2 ],
"no-lonely-if": 1,
"no-mixed-spaces-and-tabs": 1,
"no-multiple-empty-lines": 1,
"no-space-before-semi": 1,
"no-spaced-func": 1,
"space-after-keywords": [ 1, "always" ],
"space-infix-ops": 1,
"space-return-throw-case": 1,
"spaced-line-comment": 1,
"max-params": [ 1, 4 ],
"max-depth": [1, 3 ],
"max-len": [ 1, 80 ],
"quotes": [ 1, "single" ]
}
}

155
eslintrc Normal file
View File

@@ -0,0 +1,155 @@
# ESLint documentation can be found at http://eslint.org/docs/
env:
browser: true
node: true
amd: false
mocha: true
jasmine: false
rules:
no-alert: 2
no-array-constructor: 2
no-bitwise: 0
no-caller: 2
no-catch-shadow: 2
no-comma-dangle: 2
no-cond-assign: [2, 'always']
no-console: 0
no-constant-condition: 2
no-control-regex: 2
no-debugger: 2
no-delete-var: 2
no-div-regex: 0
no-dupe-keys: 2
no-else-return: 2
no-empty: 2
no-empty-class: 2
no-empty-label: 2
no-eq-null: 2
no-eval: 2
no-ex-assign: 2
no-extend-native: 2
no-extra-bind: 2
no-extra-boolean-cast: 2
no-extra-parens: 0
no-extra-semi: 2
no-fallthrough: 2
no-floating-decimal: 0
no-func-assign: 2
no-implied-eval: 2
no-inline-comments: 0
no-inner-declarations: [2, 'functions']
no-invalid-regexp: 2
no-irregular-whitespace: 2
no-iterator: 2
no-label-var: 2
no-labels: 2
no-lone-blocks: 2
no-lonely-if: 2
no-loop-func: 2
no-mixed-requires: [0, false]
no-mixed-spaces-and-tabs: [2, false]
no-multi-spaces: 2
no-multi-str: 2
no-multiple-empty-lines: [2, {max: 2}]
no-native-reassign: 2
no-negated-in-lhs: 2
no-nested-ternary: 0
no-new: 2
no-new-func: 2
no-new-object: 2
no-new-require: 0
no-new-wrappers: 2
no-obj-calls: 2
no-octal: 2
no-octal-escape: 2
no-path-concat: 0
no-plusplus: 0
no-process-env: 0
no-process-exit: 0
no-proto: 2
no-redeclare: 2
no-regex-spaces: 2
no-reserved-keys: 0
no-restricted-modules: 0
no-return-assign: 2
no-script-url: 2
no-self-compare: 2
no-sequences: 2
no-shadow: 2
no-shadow-restricted-names: 2
no-space-before-semi: 2
no-spaced-func: 2
no-sparse-arrays: 2
no-sync: 0
no-ternary: 0
no-trailing-spaces: 2
no-undef: 2
no-undef-init: 2
no-undefined: 0
no-underscore-dangle: 0
no-unreachable: 2
no-unused-expressions: 2
no-unused-vars: [2, {vars: 'all', args: 'after-used'}]
no-use-before-define: 2
no-void: 2
no-var: 0
no-warning-comments: [0, {terms: ['todo', 'fixme', 'xxx'], location: 'start'}]
no-with: 2
no-wrap-func: 2
block-scoped-var: 2
brace-style: 2
camelcase: 0
comma-spacing: 2
comma-style: 2
complexity: [0, 11]
consistent-return: 2
consistent-this: [2, 'self']
curly: [2, 'all']
default-case: 0
dot-notation: [2, {allowKeywords: true}]
eol-last: 2
eqeqeq: 2
func-names: 0
func-style: [2, 'declaration']
generator-star: 0
guard-for-in: 0
handle-callback-err: 2
key-spacing: [2, {beforeColon: false, afterColon: true}]
max-depth: [1, 4]
max-len: [2, 80]
max-nested-callbacks: [1, 2]
max-params: [1, 4]
max-statements: [0, 10]
new-cap: 2
new-parens: 2
one-var: 0
operator-assignment: [0, 'always']
padded-blocks: 0
quote-props: 0
quotes: [2, 'single']
radix: 2
semi: 2
sort-vars: 0
space-after-function-name: [0, 'never']
space-after-keywords: 2
space-before-blocks: 2
space-in-brackets: 2
space-in-parens: 2
space-infix-ops: 2
space-return-throw-case: 2
space-unary-ops: [2, {words: true, nonwords: false}]
spaced-line-comment: 2
strict: [2, 'global']
use-isnan: 2
valid-jsdoc: 2
valid-typeof: 2
vars-on-top: 0
wrap-iife: 0
wrap-regex: 0
yoda: [2, 'never']
ecmaFeatures:
blockBindings: true
defaultParams: true
forOf: true
generators: true
jsx: true

View File

@@ -52,7 +52,7 @@
"pretest": "node_modules/.bin/gulp concat-sjcl",
"test": "./node_modules/.bin/istanbul test -x build/sjcl.js -x src/js/jsbn/* ./node_modules/mocha/bin/_mocha -- --reporter ${MOCHA_REPORTER:=spec} test/*-test.js",
"coveralls": "cat ./coverage/lcov.info | ./node_modules/.bin/coveralls",
"lint": "eslint --reset -c eslint.json src/js/ripple/*.js",
"lint": "eslint --reset -c eslintrc src/js/ripple/*.js",
"perf": "./scripts/perf_test.sh"
},
"repository": {