UNPKG

3.26 kBJavaScriptView Raw
1"use strict";
2/**
3 * @filellint
4 * @ctime 2014-10-8
5 */
6
7const os = require('os');
8const Htmllint = require('htmllint');
9const Csslint = require('csslint').CSSLint;
10const Jslint = require('atropa-jslint');
11const jdfUtils = require('jdf-utils');
12const $ = jdfUtils.base;
13const f = jdfUtils.file;
14const logger = require('jdf-log');
15
16/**
17 * @init
18 * @param {String} filename 文件名称
19 */
20exports.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
58function 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
68function 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 // console.log('#'+(index+1));
91 // console.log('line: ' + message.line + ', column: ' + message.col);
92 // console.log('msg: ' + message.message);
93 // console.log('at: ' + message.evidence);
94 console.log(`\t${message.line},${message.col}\t${message.message}\t${message.evidence}`)
95 }
96 });
97
98 }
99 console.log();
100}
101
102function 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 // console.log('#'+(index+1));
110 // console.log('line: ' + $.getVar(error.line) + ', column: ' + $.getVar(error.character));
111 // console.log('msg: ' + $.getVar(error.reason));
112 // console.log('at: ' + $.getVar(error.evidence).replace(/\t/g,''));
113 console.log(`\t${$.getVar(error.line)},${$.getVar(error.character)}\t${$.getVar(error.reason)}`);
114 }
115 });
116 console.log();
117 }
118}
119
120function 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}