@addon24/eslint-config
Version:
ESLint configuration rules for WorldOfTextcraft projects - Centralized configuration for all project types
96 lines (79 loc) • 2.86 kB
JavaScript
/**
* @fileoverview Verbot von Leerzeilen zwischen Dekoratoren und Properties
* @author WorldOfTextcraft Team
*/
export default {
meta: {
type: "layout",
docs: {
description: "Verbot von Leerzeilen zwischen Dekoratoren und Properties",
category: "Stylistic Issues",
recommended: false,
},
fixable: "whitespace",
schema: [],
messages: {
noBlankLinesBetweenDecoratorsAndProperties:
"Leerzeilen zwischen Dekoratoren und Properties sind nicht erlaubt. Entferne die Leerzeile(n)."
}
},
create(context) {
const sourceCode = context.getSourceCode();
function checkForBlankLinesBetweenDecoratorsAndProperties(node) {
// Nur für Property-Definitionen prüfen
if (node.type !== "PropertyDefinition" && node.type !== "MethodDefinition") {
return;
}
// Prüfen ob das Property/Method Dekoratoren hat
if (!node.decorators || node.decorators.length === 0) {
return;
}
const lastDecorator = node.decorators[node.decorators.length - 1];
const propertyStart = node.key ? node.key.loc.start : node.loc.start;
// Alle Tokens zwischen dem letzten Dekorator und dem Property finden
const tokens = sourceCode.getTokensBetween(lastDecorator, node);
// Nach Leerzeilen suchen
let hasBlankLines = false;
for (let i = 0; i < tokens.length; i++) {
const token = tokens[i];
if (token.type === "Punctuator" && token.value === "@") {
// Wenn wir einen weiteren Dekorator finden, stoppen
break;
}
// Nach Leerzeilen suchen
if (token.type === "Whitespace" || token.type === "Line") {
const lines = token.value.split("\n");
if (lines.length > 2) { // Mehr als eine Leerzeile
hasBlankLines = true;
}
}
}
// Alternative Prüfung über Zeilen
const lastDecoratorLine = lastDecorator.loc.end.line;
const propertyLine = propertyStart.line;
if (propertyLine - lastDecoratorLine > 1) {
hasBlankLines = true;
}
if (hasBlankLines) {
context.report({
node,
messageId: "noBlankLinesBetweenDecoratorsAndProperties",
fix(fixer) {
// Alle Leerzeilen zwischen Dekorator und Property entfernen
const range = [
lastDecorator.range[1],
node.range[0]
];
const text = sourceCode.text.slice(range[0], range[1]);
const cleanedText = text.replace(/\n\s*\n/g, "\n");
return fixer.replaceTextRange(range, cleanedText);
}
});
}
}
return {
PropertyDefinition: checkForBlankLinesBetweenDecoratorsAndProperties,
MethodDefinition: checkForBlankLinesBetweenDecoratorsAndProperties
};
}
};