|
|
@@ -6,16 +6,37 @@ const gulp = require( 'gulp' );
|
|
|
const jshint = require( 'gulp-jshint' );
|
|
|
const jscs = require( 'gulp-jscs' );
|
|
|
const fs = require( 'fs' );
|
|
|
+const guppy = require( 'git-guppy' )( gulp );
|
|
|
+const gulpFilter = require( 'gulp-filter' );
|
|
|
+const gutil = require( 'gulp-util' );
|
|
|
|
|
|
module.exports = ( config ) => {
|
|
|
const src = [ '**/*.js' ].concat( config.IGNORED_FILES.map( i => '!' + i ), getGitIgnore() );
|
|
|
|
|
|
gulp.task( 'lint', () => {
|
|
|
return gulp.src( src )
|
|
|
- .pipe( jscs() )
|
|
|
- .pipe( jshint() )
|
|
|
- .pipe( jscs.reporter() )
|
|
|
- .pipe( jshint.reporter( 'jshint-reporter-jscs' ) );
|
|
|
+ .pipe( lint() );
|
|
|
+ } );
|
|
|
+
|
|
|
+ gulp.task( 'pre-commit', () => {
|
|
|
+ return guppy.stream( 'pre-commit' )
|
|
|
+ .pipe( gulpFilter( src ) )
|
|
|
+ .pipe( lint() )
|
|
|
+
|
|
|
+ // Error reporting for gulp.
|
|
|
+ .pipe( jscs.reporter( 'fail' ) )
|
|
|
+ .on( 'error', errorHandler )
|
|
|
+ .pipe( jshint.reporter( 'fail' ) )
|
|
|
+ .on( 'error', errorHandler );
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Handles error from jscs and jshint fail reporters. Stops node process with error code
|
|
|
+ * and prints error message to the console.
|
|
|
+ */
|
|
|
+ function errorHandler() {
|
|
|
+ gutil.log( gutil.colors.red( 'Linting failed, commit aborted' ) );
|
|
|
+ process.exit( 1 );
|
|
|
+ }
|
|
|
} );
|
|
|
|
|
|
/**
|
|
|
@@ -36,4 +57,18 @@ module.exports = ( config ) => {
|
|
|
// Add `!` for ignore glob.
|
|
|
.map( i => '!' + i );
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Returns stream with all linting plugins combined.
|
|
|
+ * @returns { Stream }
|
|
|
+ */
|
|
|
+ function lint() {
|
|
|
+ const stream = jscs();
|
|
|
+ stream
|
|
|
+ .pipe( jshint() )
|
|
|
+ .pipe( jscs.reporter() )
|
|
|
+ .pipe( jshint.reporter( 'jshint-reporter-jscs' ) );
|
|
|
+
|
|
|
+ return stream;
|
|
|
+ }
|
|
|
};
|