1 | "use strict";
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 | const os = require('os');
|
8 | const Htmllint = require('htmllint');
|
9 | const Csslint = require('csslint').CSSLint;
|
10 | const Jslint = require('atropa-jslint');
|
11 | const jdfUtils = require('jdf-utils');
|
12 | const $ = jdfUtils.base;
|
13 | const f = jdfUtils.file;
|
14 | const logger = require('jdf-log');
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 | exports.init = function(filename){
|
21 | if(!typeof(filename) !== 'undefined'){
|
22 | if(f.isDir(filename)){
|
23 | var filelist = f.getdirlist(filename, '(html|vm|tpl|css|scss|less|js)$');
|
24 |
|
25 | filelist.forEach(function(file){
|
26 | route(file);
|
27 | });
|
28 |
|
29 | }else{
|
30 | route(filename);
|
31 | }
|
32 | }
|
33 |
|
34 | function route(file){
|
35 | var exists = f.exists(file);
|
36 |
|
37 | if($.is.httpLink(file)){
|
38 | httpLinkLint(file);
|
39 | return;
|
40 | }
|
41 |
|
42 | if(exists){
|
43 | if($.is.html(file) || $.is.vm(file) || $.is.tpl(file)){
|
44 | htmlLint(file);
|
45 | }else if($.is.css(file) || $.is.less(file) || $.is.sass(file)){
|
46 | cssLint(file);
|
47 | }else if($.is.js(file)){
|
48 | jsLint(file);
|
49 | }else{
|
50 | logger.warn('can not lint file ' + file);
|
51 | }
|
52 | }else{
|
53 | logger.error(file + ' may be not exist.');
|
54 | }
|
55 | }
|
56 | }
|
57 |
|
58 | function htmlLint(filename){
|
59 | var content = f.read(filename);
|
60 | console.log(filename);
|
61 |
|
62 | Htmllint(content).forEach(function(item, index){
|
63 | console.log(`\t${item.line},${item.column}\t${item.msg}`);
|
64 | });
|
65 | console.log();
|
66 | }
|
67 |
|
68 | function cssLint(filename){
|
69 | var content = f.read(filename);
|
70 | var result = Csslint.verify(content);
|
71 |
|
72 | if(result && result.messages.length){
|
73 | var n = 0;
|
74 | var messagesType = function (type){
|
75 | return type == 'error' || type == 'warning';
|
76 | }
|
77 | result.messages.forEach(function (message, i){
|
78 | var type = message.type;
|
79 | if(messagesType(type)){
|
80 | n += 1;
|
81 | }
|
82 | });
|
83 |
|
84 | console.log(filename);
|
85 |
|
86 | result.messages.forEach(function (message, index){
|
87 | var type = message.type;
|
88 |
|
89 | if(messagesType(type)){
|
90 |
|
91 |
|
92 |
|
93 |
|
94 | console.log(`\t${message.line},${message.col}\t${message.message}\t${message.evidence}`)
|
95 | }
|
96 | });
|
97 |
|
98 | }
|
99 | console.log();
|
100 | }
|
101 |
|
102 | function jsLint(filename){
|
103 | var result = Jslint.JSLINT(f.read(filename));
|
104 |
|
105 | if(!result) {
|
106 | console.log(filename);
|
107 | Jslint.JSLINT.errors.forEach(function (error, index) {
|
108 | if(error){
|
109 |
|
110 |
|
111 |
|
112 |
|
113 | console.log(`\t${$.getVar(error.line)},${$.getVar(error.character)}\t${$.getVar(error.reason)}`);
|
114 | }
|
115 | });
|
116 | console.log();
|
117 | }
|
118 | }
|
119 |
|
120 | function httpLinkLint(link){
|
121 | $.httpget(link, function(data){
|
122 | logger.info('http-link-lint: ', link);
|
123 | Htmllint(data).forEach(function(item, index){
|
124 | console.log('#' + (index+1));
|
125 | console.log('line: ' + item.line + ', column: ' + item.column);
|
126 | console.log('msg: ' + item.msg);
|
127 | });
|
128 | });
|
129 | }
|