kopia lustrzana https://github.com/c9/core
95 wiersze
2.3 KiB
JavaScript
95 wiersze
2.3 KiB
JavaScript
/**
|
|
* Cloud9 Language Foundation
|
|
*
|
|
* @copyright 2013, Ajax.org B.V.
|
|
*/
|
|
define(function(require, exports, module) {
|
|
|
|
var baseLanguageHandler = require("plugins/c9.ide.language/base_handler");
|
|
var CSSLint = null;
|
|
var handler = module.exports = Object.create(baseLanguageHandler);
|
|
|
|
handler.handlesLanguage = function(language) {
|
|
return language === "css" || language === "less";
|
|
};
|
|
|
|
handler.analyze = function(value, ast, options, callback) {
|
|
if (this.language === "less")
|
|
return callback();
|
|
|
|
if (!CSSLint) {
|
|
return require(["ace/mode/css/csslint"], function(m) {
|
|
CSSLint = m.CSSLint;
|
|
callback(handler.analyzeSync(value, ast));
|
|
});
|
|
}
|
|
|
|
callback(handler.analyzeSync(value, ast));
|
|
};
|
|
|
|
// 0: ignore, 1: warning, 2: error, 3: info
|
|
var CSSLint_RULESET = {
|
|
"adjoining-classes": 0,
|
|
"box-model": 1,
|
|
"box-sizing": 1,
|
|
"compatible-vendor-prefixes": 3,
|
|
"display-property-grouping": 1,
|
|
"duplicate-background-images": 1,
|
|
"duplicate-properties": 1,
|
|
"empty-rules": 1,
|
|
"errors": 2,
|
|
"fallback-colors": 3,
|
|
"floats": 1,
|
|
"font-faces": 1,
|
|
"font-sizes": 1,
|
|
"gradients": 3,
|
|
"ids": 0,
|
|
"import": 0,
|
|
"important": 3,
|
|
"known-properties": 1,
|
|
"outline-none": 3,
|
|
"overqualified-elements": 1,
|
|
"qualified-headings": 3,
|
|
"regex-selectors": 1,
|
|
"rules-count": 1,
|
|
"shorthand": 1,
|
|
"star-property-hack": 1,
|
|
"text-indent": 1,
|
|
"underscore-property-hack": 1,
|
|
"unique-headings": 1,
|
|
"universal-selector": 1,
|
|
"unqualified-attributes": 1,
|
|
"vendor-prefix": 3,
|
|
"zero-units": 0
|
|
};
|
|
|
|
handler.analyzeSync = function(value, ast) {
|
|
value = value.replace(/^(#!.*\n)/, "//$1");
|
|
|
|
if (!CSSLint)
|
|
return;
|
|
|
|
var results = value && CSSLint.verify(value, CSSLint_RULESET);
|
|
var warnings = results ? results.messages : [];
|
|
|
|
return warnings.map(function(warning) {
|
|
if (CSSLint_RULESET[warning.rule.id] === 3)
|
|
warning.type = "info";
|
|
return {
|
|
pos: {
|
|
sl: warning.line - 1,
|
|
sc: warning.col - 1
|
|
},
|
|
type: warning.type,
|
|
level: warning.type,
|
|
message: warning.message
|
|
};
|
|
});
|
|
};
|
|
|
|
handler.getIdentifierRegex = function() {
|
|
return (/[_a-zA-Z0-9-]/);
|
|
};
|
|
|
|
});
|