Skip to content

Instantly share code, notes, and snippets.

View shpaq23's full-sized avatar
🏠
Working from home

shpaq23

🏠
Working from home
View GitHub Profile
module.exports = {
testEnvironment: 'node',
transform: {'^.+\\.tsx?$': 'ts-jest'}
};
@shpaq23
shpaq23 / readonly-injectables.test.ts
Created November 11, 2021 12:09
ruleTester with fix
ruleTester.run(RULE_NAME, rule, {
valid: validStatements,
invalid: [
{ code: invalidStatements[0], errors: [{ messageId }], output: validStatements[0] },
{ code: invalidStatements[1], errors: [{ messageId }], output: validStatements[1] },
{ code: invalidStatements[2], errors: [{ messageId }], output: validStatements[2] }
]
});
@shpaq23
shpaq23 / readonly-injectables.ts
Created November 11, 2021 12:09
fixer - context.report
context.report({
messageId: 'readonlyInjectablesRequired',
loc: parameter.loc,
fix: (fixer: RuleFixer) => {
const identifier = parameter.parameter
const fixers: Array<RuleFix> = [
fixer.insertTextBefore(identifier, 'readonly ')
];
return fixers;
}
@shpaq23
shpaq23 / readonly-injectables.ts
Created November 11, 2021 12:08
resolveParameter
parameters.forEach(parameter => resolveParameter(parameter, context));
@shpaq23
shpaq23 / readonly-injectables.ts
Created November 11, 2021 12:07
context.report
context.report({
messageId: 'readonlyInjectablesRequired',
loc: parameter.loc
});
@shpaq23
shpaq23 / readonly-injectables.ts
Created November 11, 2021 12:04
resolveParameter
function resolveParameter(parameter: TSESTree.TSParameterProperty, context: Readonly<RuleContext<MessageIds, Options>>): void {
const isPublic = utils.isParameterPropertyAccessibilityNamed(parameter, 'public');
const isPrivate = utils.isParameterPropertyAccessibilityNamed(parameter, 'private');
const isProtected = utils.isParameterPropertyAccessibilityNamed(parameter, 'protected');
if (!isPublic && !isPrivate && !isProtected) {
return;
}
if (utils.isParameterPropertyReadonly(parameter)) {
const parameters: Array<TSESTree.TSParameterProperty> = utils.getParameterPropertiesFromMethodDefinition(constructor);
if (!Array.isArray(parameters) || parameters.length === 0) {
return;
}
@shpaq23
shpaq23 / readonly-injectables.ts
Created November 11, 2021 12:01
!constructor
if (!constructor) {
return;
}
@shpaq23
shpaq23 / readonly-injectables.ts
Created November 11, 2021 12:01
classDeclaration & constructor
const classDeclaration: TSESTree.ClassDeclaration = utils.getClassDeclarationFromDecorator(node);
const constructor: TSESTree.MethodDefinition = utils.getConstructorFromClassDeclaration(classDeclaration);
@shpaq23
shpaq23 / readonly-injectables.ts
Created November 11, 2021 12:00
import utils
import * as utils from '../utils/utils';