@maniascript/mslint
Version:
ManiaScript linter
28 lines (27 loc) • 992 B
JavaScript
import {} from '../linter/rule.js';
import { ExpressionStatement, Kind, DotAccessExpression } from '@maniascript/parser';
export const noUnusedExpression = {
meta: {
id: 'no-unused-expression',
description: 'Forbid unused expression',
recommended: true
},
create(context) {
function isForbidden(expression) {
if (expression instanceof DotAccessExpression) {
return (expression.functionCall === undefined &&
isForbidden(expression.object));
}
else {
return expression.kind !== Kind.FunctionCallExpression;
}
}
return {
'ExpressionStatement:enter': (node) => {
if (node instanceof ExpressionStatement && isForbidden(node.expression)) {
context.report(node, 'Expected an assignement or function call and instead found an expression');
}
}
};
}
};