瀏覽代碼

Generalized the jscs and jshint implementation into a tool.

fredck 11 年之前
父節點
當前提交
6166e686bb

+ 13 - 17
packages/ckeditor5-utils/dev/tasks/jscs.js

@@ -5,23 +5,19 @@
 var tools = require( './res/tools' );
 
 module.exports = function( grunt ) {
-	// Point to the default configurations.
-	var config = {
-		options: grunt.file.readJSON( 'dev/tasks/jscs-config.json' )
-	};
-
-	// Create the appropriate task target.
-	if ( tools.checkTaskInQueue( grunt, 'jscs:git' ) ) {
-		config.git = tools.getGitDirtyFiles().filter( function( file ) {
-			return ( /\.js$/ ).test( file );
-		} );
-	} else {
-		config.all = [ '**/*.js' ];
-	}
-
-	// Merge over configurations set in gruntfile.js.
-	grunt.config.merge( {
-		jscs: config
+	tools.setupMultitaskConfig( grunt, {
+		task: 'jscs',
+		defaultOptions: grunt.file.readJSON( 'dev/tasks/jscs-config.json' ),
+		targets: {
+			all: function() {
+				return [ '**/*.js' ];
+			},
+			git: function() {
+				return tools.getGitDirtyFiles().filter( function( file ) {
+					return ( /\.js$/ ).test( file );
+				} );
+			}
+		}
 	} );
 
 	grunt.loadNpmTasks( 'grunt-jscs' );

+ 11 - 15
packages/ckeditor5-utils/dev/tasks/jshint.js

@@ -5,21 +5,17 @@
 var tools = require( './res/tools' );
 
 module.exports = function( grunt ) {
-	// Point to the default configurations.
-	var config = {
-		options: grunt.file.readJSON( 'dev/tasks/jshint-config.json' )
-	};
-
-	// Create the appropriate task target.
-	if ( tools.checkTaskInQueue( grunt, 'jshint:git' ) ) {
-		config.git = tools.getGitDirtyFiles();
-	} else {
-		config.all = [ '**/*.js' ];
-	}
-
-	// Merge over configurations set in gruntfile.js.
-	grunt.config.merge( {
-		jshint: config
+	tools.setupMultitaskConfig( grunt, {
+		task: 'jshint',
+		defaultOptions: grunt.file.readJSON( 'dev/tasks/jshint-config.json' ),
+		targets: {
+			all: function() {
+				return [ '**/*.js' ];
+			},
+			git: function() {
+				return tools.getGitDirtyFiles();
+			}
+		}
 	} );
 
 	grunt.loadNpmTasks( 'grunt-contrib-jshint' );

+ 29 - 2
packages/ckeditor5-utils/dev/tasks/res/tools.js

@@ -9,16 +9,43 @@ module.exports = {
 		var cliTasks = grunt.cli.tasks;
 
 		// Check if the task has been called directly.
-		var isDirectCall = ( cliTasks.indexOf( 'task' ) > -1 );
+		var isDirectCall = ( cliTasks.indexOf( task ) > -1 );
 
 		// Check if this is a "default" call and that the task is inside "default".
 		var isDefaultTask = ( cliTasks.indexOf( 'default' ) > -1 ) || !cliTasks.length,
 			// Hacking grunt hard.
-			isTaskInDefault = isDefaultTask && ( grunt.task._tasks.default.info.indexOf( '"jshint:git"' ) > -1 );
+			isTaskInDefault = isDefaultTask && ( grunt.task._tasks.default.info.indexOf( '"' + task + '"' ) > -1 );
 
 		return isDirectCall || isDefaultTask;
 	},
 
+	setupMultitaskConfig: function( grunt, options ) {
+		var that = this,
+			task = options.task,
+			taskConfig = {},
+			config = taskConfig[ task ] = {
+				options: options.defaultOptions
+			};
+
+		// "all" is the default target to be used if others are not to be run.
+		var all = options.targets.all,
+			isAll = true;
+		delete options.targets.all;
+		Object.getOwnPropertyNames( options.targets ).forEach( function( target ) {
+			if ( that.checkTaskInQueue( grunt, task + ':' + target ) ) {
+				config[ target ] = options.targets[ target ]();
+				isAll = false;
+			}
+		} );
+
+		if ( isAll ) {
+			config.all = all();
+		}
+
+		// Merge over configurations set in gruntfile.js.
+		grunt.config.merge( taskConfig );
+	},
+
 	getGitDirtyFiles: function() {
 		// Cache it, so it is executed only once when running multiple tasks.
 		if ( !dirtyFiles ) {