UNPKG

@addon24/eslint-config

Version:

ESLint configuration rules for WorldOfTextcraft projects - Centralized configuration for all project types

96 lines (79 loc) 2.86 kB
/** * @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 }; } };