@o3r/eslint-plugin
Version:
The module provides in-house eslint plugins to use in your own eslint configuration.
57 lines (56 loc) • 2.22 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.name = void 0;
const utils_1 = require("../../utils");
const utils_2 = require("../utils");
/** Rule Name */
exports.name = 'no-inner-html';
exports.default = (0, utils_1.createRule)({
name: exports.name,
defaultOptions: [],
meta: {
type: 'problem',
hasSuggestions: true,
docs: {
description: 'Ensures that your template does not use innerHTML'
},
schema: [],
messages: {
error: 'Unexpected use of innerHTML',
fix: 'Replace innerHTML by innerText'
},
fixable: 'code'
},
create: (context) => {
// To throw error if use without @angular-eslint/template-parser
(0, utils_2.getTemplateParserServices)(context);
const rule = (node) => {
const innerHTMLAttribute = node.attributes.find((a) => /innerhtml/i.test(a.name));
if (innerHTMLAttribute && innerHTMLAttribute.keySpan) {
context.report({
messageId: 'error',
loc: {
column: innerHTMLAttribute.keySpan.start.col,
line: innerHTMLAttribute.keySpan.start.line,
end: {
column: innerHTMLAttribute.keySpan.end.col,
line: innerHTMLAttribute.keySpan.end.line
},
start: {
column: innerHTMLAttribute.keySpan.start.col,
line: innerHTMLAttribute.keySpan.start.line
}
},
fix: (fixer) => fixer.replaceTextRange([innerHTMLAttribute.keySpan.start.offset, innerHTMLAttribute.keySpan.end.offset], 'innerText'),
suggest: [{
messageId: 'fix',
fix: (fixer) => fixer.replaceTextRange([innerHTMLAttribute.keySpan.start.offset, innerHTMLAttribute.keySpan.end.offset], 'innerText')
}]
});
}
};
return {
Element: rule
};
}
});