mirror of
https://github.com/elastic/kibana.git
synced 2025-04-23 09:19:04 -04:00
Merge pull request #5477 from spalger/implement/snake_case_check
[grunt/precommit] added check for snake_case filenames
This commit is contained in:
commit
e73212fcd3
6 changed files with 71 additions and 40 deletions
|
@ -49,7 +49,7 @@
|
|||
"test:coverage": "grunt test:coverage",
|
||||
"build": "grunt build",
|
||||
"start": "./bin/kibana --dev",
|
||||
"precommit": "grunt lintStagedFiles",
|
||||
"precommit": "grunt precommit",
|
||||
"karma": "karma start",
|
||||
"elasticsearch": "grunt esvm:dev:keepalive",
|
||||
"lint": "grunt eslint:source",
|
||||
|
|
14
tasks/check_staged_filenames.js
Normal file
14
tasks/check_staged_filenames.js
Normal file
|
@ -0,0 +1,14 @@
|
|||
export default function (grunt) {
|
||||
grunt.registerTask('checkStagedFilenames', function () {
|
||||
grunt.task.requires('collectStagedFiles');
|
||||
|
||||
const invalid = grunt.config
|
||||
.get('stagedFiles')
|
||||
.filter(name => name.match(/[A-Z ]/))
|
||||
.reduce((all, name) => `${all} ${name}\n`, '');
|
||||
|
||||
if (invalid) {
|
||||
grunt.fail.fatal(`Filenames must use snake_case.\n${invalid}`);
|
||||
}
|
||||
});
|
||||
}
|
28
tasks/collect_staged_filenames.js
Normal file
28
tasks/collect_staged_filenames.js
Normal file
|
@ -0,0 +1,28 @@
|
|||
import { resolve } from 'path';
|
||||
import SimpleGit from 'simple-git';
|
||||
import { promisify } from 'bluebird';
|
||||
|
||||
const root = resolve(__dirname, '..');
|
||||
const simpleGit = new SimpleGit(root);
|
||||
const diff = promisify(simpleGit.diff, simpleGit);
|
||||
|
||||
export default function (grunt) {
|
||||
grunt.registerTask('collectStagedFiles', function () {
|
||||
diff(['--name-status', '--cached'])
|
||||
.then(output => {
|
||||
const files = output
|
||||
.split('\n')
|
||||
.map(line => line.trim().split('\t'))
|
||||
.map(parts => {
|
||||
const status = parts.shift();
|
||||
if (status === 'D' || status === 'U') return;
|
||||
return parts.join('\t').trim();
|
||||
})
|
||||
.filter(Boolean);
|
||||
|
||||
grunt.log.ok(files.length + ' staged files');
|
||||
grunt.config.set('stagedFiles', files);
|
||||
})
|
||||
.nodeify(this.async());
|
||||
});
|
||||
};
|
|
@ -1,39 +0,0 @@
|
|||
var _ = require('lodash');
|
||||
var resolve = require('path').resolve;
|
||||
var root = resolve(__dirname, '..');
|
||||
var simpleGit = require('simple-git')(root);
|
||||
var diff = require('bluebird').promisify(simpleGit.diff, simpleGit);
|
||||
|
||||
module.exports = function (grunt) {
|
||||
|
||||
grunt.registerTask(
|
||||
'lintStagedFiles',
|
||||
'Run staged files through JSHint/JSCS',
|
||||
function () {
|
||||
|
||||
diff(['--name-only', '--cached'])
|
||||
.then(function (files) {
|
||||
// match these patterns
|
||||
var patterns = grunt.config.get('eslint.source.files.src');
|
||||
if (!patterns) grunt.fail.warn('eslint file pattern is not defined');
|
||||
|
||||
files = files.split('\n').filter(Boolean)
|
||||
.map(function (file) {
|
||||
return resolve(root, file);
|
||||
})
|
||||
.filter(function (file) {
|
||||
return grunt.file.isMatch(patterns, file);
|
||||
});
|
||||
|
||||
grunt.log.ok('Staged files to lint: ' + files.length);
|
||||
if (!_.size(files)) return;
|
||||
|
||||
grunt.config.set('eslint.staged.files.src', files);
|
||||
grunt.task.run(['eslint:staged']);
|
||||
})
|
||||
.nodeify(this.async());
|
||||
|
||||
}
|
||||
);
|
||||
};
|
||||
|
21
tasks/lint_staged_files.js
Normal file
21
tasks/lint_staged_files.js
Normal file
|
@ -0,0 +1,21 @@
|
|||
import { resolve } from 'path';
|
||||
|
||||
const root = resolve(__dirname, '..');
|
||||
|
||||
export default function (grunt) {
|
||||
grunt.registerTask('lintStagedFiles', function () {
|
||||
grunt.task.requires('collectStagedFiles');
|
||||
|
||||
// match these patterns
|
||||
var patterns = grunt.config.get('eslint.source.files.src');
|
||||
if (!patterns) grunt.fail.warn('eslint file pattern is not defined');
|
||||
|
||||
const files = grunt.config
|
||||
.get('stagedFiles')
|
||||
.map(file => resolve(root, file))
|
||||
.filter(file => grunt.file.isMatch(patterns, file));
|
||||
|
||||
grunt.config.set('eslint.staged.files.src', files);
|
||||
grunt.task.run(['eslint:staged']);
|
||||
});
|
||||
}
|
7
tasks/precommit.js
Normal file
7
tasks/precommit.js
Normal file
|
@ -0,0 +1,7 @@
|
|||
export default function (grunt) {
|
||||
grunt.registerTask('precommit', [
|
||||
'collectStagedFiles',
|
||||
'checkStagedFilenames',
|
||||
'lintStagedFiles'
|
||||
]);
|
||||
};
|
Loading…
Add table
Add a link
Reference in a new issue