/
githubmirror
/
angular
Обзор
Документация
Войти
/
githubmirror
/
angular
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
tools/tslint/requireInternalWithUnderscoreRule.ts
56 строк
2 KB
Joey Perrott
refactor: update license text to point to angular.dev (#57901)
24 сен 2024, 16:33
24 сен 2024, 16:33
9dbe6fc
Код
Авторство
О чём код?
/** * @license * Copyright Google LLC All Rights Reserved. * * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.dev/license */ import {RuleFailure} from 'tslint/lib'; import {RuleWalker} from 'tslint/lib/language/walker'; import {AbstractRule} from 'tslint/lib/rules'; import ts from 'typescript'; export class Rule extends AbstractRule { override apply(sourceFile: ts.SourceFile): RuleFailure[] { const typedefWalker = new TypedefWalker(sourceFile, this.getOptions()); return this.applyWithWalker(typedefWalker); } } class TypedefWalker extends RuleWalker { protected visitPropertyDeclaration(node: ts.PropertyDeclaration): void { this.assertInternalAnnotationPresent(node); super.visitPropertyDeclaration(node); } public visitMethodDeclaration(node: ts.MethodDeclaration): void { this.assertInternalAnnotationPresent(node); super.visitMethodDeclaration(node); } private hasInternalAnnotation(range: ts.CommentRange): boolean { const text = this.getSourceFile().text; const comment = text.substring(range.pos, range.end); return comment.indexOf('@internal') >= 0; } private assertInternalAnnotationPresent(node: ts.NamedDeclaration) { if (node.name && node.name.getText().charAt(0) !== '_') return; if (ts.getCombinedModifierFlags(node) & ts.ModifierFlags.Private) return; const ranges = ts.getLeadingCommentRanges(this.getSourceFile().text, node.pos); if (ranges) { for (let i = 0; i < ranges.length; i++) { if (this.hasInternalAnnotation(ranges[i])) return; } } this.addFailure( this.createFailure( node.getStart(), node.getWidth(), `module-private member ${node.name?.getText()} must be annotated @internal`, ), ); } }