This commit applies `strictNullChecks` to the entire codebase to improve maintainability and type safety. Key changes include: - Remove some explicit null-checks where unnecessary. - Add necessary null-checks. - Refactor static factory functions for a more functional approach. - Improve some test names and contexts for better debugging. - Add unit tests for any additional logic introduced. - Refactor `createPositionFromRegexFullMatch` to its own function as the logic is reused. - Prefer `find` prefix on functions that may return `undefined` and `get` prefix for those that always return a value.
24 lines
731 B
TypeScript
24 lines
731 B
TypeScript
import { IExpression } from '../Expression/IExpression';
|
|
import { ParameterSubstitutionParser } from '../SyntaxParsers/ParameterSubstitutionParser';
|
|
import { WithParser } from '../SyntaxParsers/WithParser';
|
|
import { IExpressionParser } from './IExpressionParser';
|
|
|
|
const Parsers = [
|
|
new ParameterSubstitutionParser(),
|
|
new WithParser(),
|
|
];
|
|
|
|
export class CompositeExpressionParser implements IExpressionParser {
|
|
public constructor(private readonly leafs: readonly IExpressionParser[] = Parsers) {
|
|
if (!leafs.length) {
|
|
throw new Error('missing leafs');
|
|
}
|
|
}
|
|
|
|
public findExpressions(code: string): IExpression[] {
|
|
return this.leafs.flatMap(
|
|
(parser) => parser.findExpressions(code) || [],
|
|
);
|
|
}
|
|
}
|