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.
41 lines
1.5 KiB
TypeScript
41 lines
1.5 KiB
TypeScript
import type { FunctionData } from '@/application/collections/';
|
|
import { sequenceEqual } from '@/application/Common/Array';
|
|
import { ISharedFunctionCollection } from '@/application/Parser/Script/Compiler/Function/ISharedFunctionCollection';
|
|
import { ISharedFunctionsParser } from '@/application/Parser/Script/Compiler/Function/ISharedFunctionsParser';
|
|
import { ILanguageSyntax } from '@/application/Parser/Script/Validation/Syntax/ILanguageSyntax';
|
|
import { SharedFunctionCollectionStub } from './SharedFunctionCollectionStub';
|
|
|
|
export class SharedFunctionsParserStub implements ISharedFunctionsParser {
|
|
public callHistory = new Array<{
|
|
functions: readonly FunctionData[],
|
|
syntax: ILanguageSyntax,
|
|
}>();
|
|
|
|
private setupResults = new Array<{
|
|
functions: readonly FunctionData[],
|
|
result: ISharedFunctionCollection,
|
|
}>();
|
|
|
|
public setup(functions: readonly FunctionData[], result: ISharedFunctionCollection) {
|
|
this.setupResults.push({ functions, result });
|
|
}
|
|
|
|
public parseFunctions(
|
|
functions: readonly FunctionData[],
|
|
syntax: ILanguageSyntax,
|
|
): ISharedFunctionCollection {
|
|
this.callHistory.push({
|
|
functions: Array.from(functions),
|
|
syntax,
|
|
});
|
|
const result = this.findResult(functions);
|
|
return result || new SharedFunctionCollectionStub();
|
|
}
|
|
|
|
private findResult(functions: readonly FunctionData[]): ISharedFunctionCollection | undefined {
|
|
return this.setupResults
|
|
.find((result) => sequenceEqual(result.functions, functions))
|
|
?.result;
|
|
}
|
|
}
|