/
common.js
97 lines (87 loc) · 2.37 KB
/
common.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
'use strict';
var fs = require('fs'),
path = require('path'),
_ = require('yeoman-generator/lib/actions/string')._,
async = require('async'),
jshint = require('jshint').JSHINT,
coffeelint = require('coffeelint'),
recess = require('recess'),
stylus = require('stylus').render,
jsonlint = require('jsonlint').parse,
jade = (function(fakeApp){
require('derby-jade')(fakeApp);
return fakeApp.compilers['.jade'];
})({viewExtensions: [], compilers: {}});
var common = module.exports = {};
// defaults passed as --<whatever>
common.opts = {
'skip-install': true,
'skip-messages': true
};
common.arrReplace = function(arr, pattern, replacement){
return arr.map(function(str){
return str.replace(pattern, replacement);
});
};
// everybody has their own format
common.linters = {
coffee: function (file, done) {
fs.readFile(file, {encoding: 'utf-8'}, function(err, src){
var errors = coffeelint.lint(src);
done(null, errors.length ? [file, errors] : null);
});
},
js: function (file, done) {
fs.readFile(file, function(err, src){
var errors = jshint(src);
done(null, errors ? [file, jshint.errors] : null);
});
},
css: function (file, done) {
recess([file], {}, function(err){
done(null, err ? [file, err] : null);
});
},
json: function (file, done) {
fs.readFile(file, {encoding: 'utf-8'}, function(err, src){
var errors;
try{
jsonlint(src);
}catch(err){
errors = err.message;
}
done(null, errors ? [file, errors] : null);
});
},
styl: function (file, done) {
fs.readFile(file, {encoding: 'utf-8'}, function(err, src){
stylus(src, {}, function(err){
done(null, err ? [file, err] : null);
});
});
},
jade: function(file, done) {
fs.readFile(file, {encoding: 'utf-8'}, function(err, src){
var errors;
try{
jade(src, file);
}catch(err){
errors = err.message;
}
done(null, errors ? [file, errors] : null);
});
}
};
// asynchronously lint the set of files against known linters
common.lint = function (files, done) {
async.map(
files,
function (file, done ){
var linter = common.linters[path.extname(file).slice(1)];
return linter ? linter(file, done) : done();
},
function(err, results){
done(err, _.compact(results));
}
);
};