Skip to content

Commit 0381531

Browse files
committed
refactor: rename methods to access node properties
1 parent d53f7cf commit 0381531

32 files changed

+256
-279
lines changed

src/cli/generator.ts

Lines changed: 18 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -57,14 +57,14 @@ import chalk from 'chalk';
5757
import { createSafeDsServices, SafeDsServices } from '../language/safe-ds-module.js';
5858
import { NodeFileSystem } from 'langium/node';
5959
import {
60-
abstractResultsOrEmpty,
61-
assigneesOrEmpty,
62-
blockLambdaResultsOrEmpty,
63-
importedDeclarationsOrEmpty,
64-
importsOrEmpty,
60+
getAbstractResults,
61+
getAssignees,
62+
streamBlockLambdaResults,
63+
getImportedDeclarations,
64+
getImports,
6565
isRequiredParameter,
66-
moduleMembersOrEmpty,
67-
statementsOrEmpty,
66+
getModuleMembers,
67+
getStatements,
6868
} from '../language/helpers/nodeProperties.js';
6969
import { IdManager } from '../language/helpers/idManager.js';
7070
import { isInStubFile } from '../language/helpers/fileExtensions.js';
@@ -150,10 +150,10 @@ const formatGeneratedFileName = function (baseName: string): string {
150150

151151
const generateModule = function (services: SafeDsServices, module: SdsModule): string {
152152
const importSet = new Map<String, ImportData>();
153-
const segments = moduleMembersOrEmpty(module)
153+
const segments = getModuleMembers(module)
154154
.filter(isSdsSegment)
155155
.map((segment) => generateSegment(services, segment, importSet));
156-
const pipelines = moduleMembersOrEmpty(module)
156+
const pipelines = getModuleMembers(module)
157157
.filter(isSdsPipeline)
158158
.map((pipeline) => generatePipeline(services, pipeline, importSet));
159159
const imports = generateImports(Array.from(importSet.values()));
@@ -266,7 +266,7 @@ const generateQualifiedImport = function (importStmt: ImportData): string {
266266

267267
const generateBlock = function (block: SdsBlock, frame: GenerationInfoFrame): string {
268268
// TODO filter withEffect
269-
let statements = statementsOrEmpty(block);
269+
let statements = getStatements(block);
270270
if (statements.length === 0) {
271271
return 'pass';
272272
}
@@ -291,10 +291,10 @@ const generateStatement = function (statement: SdsStatement, frame: GenerationIn
291291

292292
const generateAssignment = function (assignment: SdsAssignment, frame: GenerationInfoFrame): string {
293293
const requiredAssignees = isSdsCall(assignment.expression)
294-
? abstractResultsOrEmpty(frame.getServices().helpers.NodeMapper.callToCallable(assignment.expression)).length
294+
? getAbstractResults(frame.getServices().helpers.NodeMapper.callToCallable(assignment.expression)).length
295295
: /* c8 ignore next */
296296
1;
297-
const assignees = assigneesOrEmpty(assignment);
297+
const assignees = getAssignees(assignment);
298298
if (assignees.some((value) => !isSdsWildcard(value))) {
299299
const actualAssignees = assignees.map(generateAssignee);
300300
if (requiredAssignees === actualAssignees.length) {
@@ -325,12 +325,10 @@ const generateAssignee = function (assignee: SdsAssignee): string {
325325
};
326326

327327
const generateBlockLambda = function (blockLambda: SdsBlockLambda, frame: GenerationInfoFrame): string {
328-
const lambdaResult = blockLambdaResultsOrEmpty(blockLambda);
328+
const results = streamBlockLambdaResults(blockLambda);
329329
let lambdaBlock = generateBlock(blockLambda.body, frame);
330-
if (lambdaResult.length !== 0 && lambdaBlock !== 'pass') {
331-
lambdaBlock += `\nreturn ${lambdaResult
332-
.map((result) => `${BLOCK_LAMBDA_RESULT_PREFIX}${result.name}`)
333-
.join(', ')}`;
330+
if (!results.isEmpty()) {
331+
lambdaBlock += `\nreturn ${results.map((result) => `${BLOCK_LAMBDA_RESULT_PREFIX}${result.name}`).join(', ')}`;
334332
}
335333
return expandToString`def ${frame.getUniqueLambdaBlockName(blockLambda)}(${generateParameters(
336334
blockLambda.parameterList,
@@ -429,7 +427,7 @@ const generateExpression = function (expression: SdsExpression, frame: Generatio
429427
const suffix = isSdsCall(expression.$container) ? '' : '()';
430428
return `${receiver}.${enumMember}${suffix}`;
431429
} else if (isSdsAbstractResult(member)) {
432-
const resultList = abstractResultsOrEmpty(getContainerOfType(member, isSdsCallable));
430+
const resultList = getAbstractResults(getContainerOfType(member, isSdsCallable));
433431
if (resultList.length === 1) {
434432
return receiver;
435433
}
@@ -500,13 +498,13 @@ const getExternalReferenceNeededImport = function (
500498
// Root Node is always a module.
501499
const currentModule = <SdsModule>findRootNode(expression);
502500
const targetModule = <SdsModule>findRootNode(declaration);
503-
for (const value of importsOrEmpty(currentModule)) {
501+
for (const value of getImports(currentModule)) {
504502
// Verify same package
505503
if (value.package !== targetModule.name) {
506504
continue;
507505
}
508506
if (isSdsQualifiedImport(value)) {
509-
const importedDeclarations = importedDeclarationsOrEmpty(value);
507+
const importedDeclarations = getImportedDeclarations(value);
510508
for (const importedDeclaration of importedDeclarations) {
511509
if (declaration === importedDeclaration.declaration.ref) {
512510
if (importedDeclaration.alias !== undefined) {

src/language/builtins/safe-ds-annotations.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { isSdsAnnotation, SdsAnnotatedObject, SdsAnnotation, SdsModule, SdsParameter } from '../generated/ast.js';
2-
import { argumentsOrEmpty, findFirstAnnotationCallOf, hasAnnotationCallOf } from '../helpers/nodeProperties.js';
2+
import { getArguments, findFirstAnnotationCallOf, hasAnnotationCallOf } from '../helpers/nodeProperties.js';
33
import { SafeDsModuleMembers } from './safe-ds-module-members.js';
44
import { resourceNameToUri } from '../../helpers/resources.js';
55
import { URI } from 'langium';
@@ -96,7 +96,7 @@ export class SafeDsAnnotations extends SafeDsModuleMembers<SdsAnnotation> {
9696
parameterName: string,
9797
): EvaluatedNode {
9898
const annotationCall = findFirstAnnotationCallOf(node, annotation);
99-
const argumentValue = argumentsOrEmpty(annotationCall).find(
99+
const argumentValue = getArguments(annotationCall).find(
100100
(it) => this.nodeMapper.argumentToParameter(it)?.name === parameterName,
101101
)?.value;
102102
return this.partialEvaluator.evaluate(argumentValue);

src/language/builtins/safe-ds-module-members.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { SafeDsServices } from '../safe-ds-module.js';
22
import { isSdsModule, SdsModuleMember } from '../generated/ast.js';
33
import { LangiumDocuments, URI, WorkspaceCache } from 'langium';
4-
import { moduleMembersOrEmpty } from '../helpers/nodeProperties.js';
4+
import { getModuleMembers } from '../helpers/nodeProperties.js';
55

66
export abstract class SafeDsModuleMembers<T extends SdsModuleMember> {
77
private readonly langiumDocuments: LangiumDocuments;
@@ -31,7 +31,7 @@ export abstract class SafeDsModuleMembers<T extends SdsModuleMember> {
3131
return undefined;
3232
}
3333

34-
const firstMatchingModuleMember = moduleMembersOrEmpty(root).find((m) => m.name === name);
34+
const firstMatchingModuleMember = getModuleMembers(root).find((m) => m.name === name);
3535
if (!predicate(firstMatchingModuleMember)) {
3636
/* c8 ignore next 2 */
3737
return undefined;

src/language/helpers/nodeProperties.ts

Lines changed: 33 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ import {
5757
SdsTypeParameter,
5858
SdsTypeParameterList,
5959
} from '../generated/ast.js';
60-
import { AstNode, getContainerOfType, stream } from 'langium';
60+
import { AstNode, getContainerOfType, Stream, stream } from 'langium';
6161

6262
// -------------------------------------------------------------------------------------------------
6363
// Checks
@@ -67,7 +67,7 @@ export const hasAnnotationCallOf = (
6767
node: SdsAnnotatedObject | undefined,
6868
expected: SdsAnnotation | undefined,
6969
): boolean => {
70-
return annotationCallsOrEmpty(node).some((it) => {
70+
return getAnnotationCalls(node).some((it) => {
7171
const actual = it.annotation?.ref;
7272
return actual === expected;
7373
});
@@ -121,25 +121,25 @@ export const isStatic = (node: SdsClassMember): boolean => {
121121
// Accessors for list elements
122122
// -------------------------------------------------------------------------------------------------
123123

124-
export const abstractResultsOrEmpty = (node: SdsCallable | undefined): SdsAbstractResult[] => {
124+
export const getAbstractResults = (node: SdsCallable | undefined): SdsAbstractResult[] => {
125125
if (!node) {
126126
return [];
127127
}
128128

129129
if (isSdsBlockLambda(node)) {
130-
return blockLambdaResultsOrEmpty(node);
130+
return streamBlockLambdaResults(node).toArray();
131131
} else if (isSdsCallableType(node)) {
132-
return resultsOrEmpty(node.resultList);
132+
return getResults(node.resultList);
133133
} else if (isSdsFunction(node)) {
134-
return resultsOrEmpty(node.resultList);
134+
return getResults(node.resultList);
135135
} else if (isSdsSegment(node)) {
136-
return resultsOrEmpty(node.resultList);
136+
return getResults(node.resultList);
137137
} /* c8 ignore start */ else {
138138
return [];
139139
} /* c8 ignore stop */
140140
};
141141

142-
export const annotationCallsOrEmpty = (node: SdsAnnotatedObject | undefined): SdsAnnotationCall[] => {
142+
export const getAnnotationCalls = (node: SdsAnnotatedObject | undefined): SdsAnnotationCall[] => {
143143
if (!node) {
144144
/* c8 ignore next 2 */
145145
return [];
@@ -157,96 +157,91 @@ export const findFirstAnnotationCallOf = (
157157
node: SdsAnnotatedObject | undefined,
158158
expected: SdsAnnotation | undefined,
159159
): SdsAnnotationCall | undefined => {
160-
return annotationCallsOrEmpty(node).find((it) => {
160+
return getAnnotationCalls(node).find((it) => {
161161
const actual = it.annotation?.ref;
162162
return actual === expected;
163163
});
164164
};
165165

166-
export const argumentsOrEmpty = (node: SdsArgumentList | SdsAbstractCall | undefined): SdsArgument[] => {
166+
export const getArguments = (node: SdsArgumentList | SdsAbstractCall | undefined): SdsArgument[] => {
167167
if (isSdsArgumentList(node)) {
168168
return node.arguments;
169169
} else {
170170
return node?.argumentList?.arguments ?? [];
171171
}
172172
};
173173

174-
export const assigneesOrEmpty = (node: SdsAssignment | undefined): SdsAssignee[] => {
174+
export const getAssignees = (node: SdsAssignment | undefined): SdsAssignee[] => {
175175
return node?.assigneeList?.assignees ?? [];
176176
};
177177

178-
export const blockLambdaResultsOrEmpty = (node: SdsBlockLambda | undefined): SdsBlockLambdaResult[] => {
179-
return stream(statementsOrEmpty(node?.body))
178+
export const streamBlockLambdaResults = (node: SdsBlockLambda | undefined): Stream<SdsBlockLambdaResult> => {
179+
return stream(getStatements(node?.body))
180180
.filter(isSdsAssignment)
181-
.flatMap(assigneesOrEmpty)
182-
.filter(isSdsBlockLambdaResult)
183-
.toArray();
181+
.flatMap(getAssignees)
182+
.filter(isSdsBlockLambdaResult);
184183
};
185184

186-
export const classMembersOrEmpty = (
185+
export const getMatchingClassMembers = (
187186
node: SdsClass | undefined,
188187
filterFunction: (member: SdsClassMember) => boolean = () => true,
189188
): SdsClassMember[] => {
190189
return node?.body?.members?.filter(filterFunction) ?? [];
191190
};
192191

193-
export const columnsOrEmpty = (node: SdsSchema | undefined): SdsColumn[] => {
192+
export const getColumns = (node: SdsSchema | undefined): SdsColumn[] => {
194193
return node?.columnList?.columns ?? [];
195194
};
196195

197-
export const enumVariantsOrEmpty = (node: SdsEnum | undefined): SdsEnumVariant[] => {
196+
export const getEnumVariants = (node: SdsEnum | undefined): SdsEnumVariant[] => {
198197
return node?.body?.variants ?? [];
199198
};
200199

201-
export const importsOrEmpty = (node: SdsModule | undefined): SdsImport[] => {
200+
export const getImports = (node: SdsModule | undefined): SdsImport[] => {
202201
return node?.imports ?? [];
203202
};
204203

205-
export const importedDeclarationsOrEmpty = (node: SdsQualifiedImport | undefined): SdsImportedDeclaration[] => {
204+
export const getImportedDeclarations = (node: SdsQualifiedImport | undefined): SdsImportedDeclaration[] => {
206205
return node?.importedDeclarationList?.importedDeclarations ?? [];
207206
};
208207

209-
export const literalsOrEmpty = (node: SdsLiteralType | undefined): SdsLiteral[] => {
208+
export const getLiterals = (node: SdsLiteralType | undefined): SdsLiteral[] => {
210209
return node?.literalList?.literals ?? [];
211210
};
212211

213-
export const moduleMembersOrEmpty = (node: SdsModule | undefined): SdsModuleMember[] => {
212+
export const getModuleMembers = (node: SdsModule | undefined): SdsModuleMember[] => {
214213
return node?.members?.filter(isSdsModuleMember) ?? [];
215214
};
216215

217-
export const packageNameOrUndefined = (node: AstNode | undefined): string | undefined => {
216+
export const getPackageName = (node: AstNode | undefined): string | undefined => {
218217
return getContainerOfType(node, isSdsModule)?.name;
219218
};
220219

221-
export const parametersOrEmpty = (node: SdsCallable | undefined): SdsParameter[] => {
220+
export const getParameters = (node: SdsCallable | undefined): SdsParameter[] => {
222221
return node?.parameterList?.parameters ?? [];
223222
};
224223

225-
export const parentTypesOrEmpty = (node: SdsClass | undefined): SdsType[] => {
224+
export const getParentTypes = (node: SdsClass | undefined): SdsType[] => {
226225
return node?.parentTypeList?.parentTypes ?? [];
227226
};
228227

229-
export const placeholdersOrEmpty = (node: SdsBlock | undefined): SdsPlaceholder[] => {
230-
return stream(statementsOrEmpty(node))
231-
.filter(isSdsAssignment)
232-
.flatMap(assigneesOrEmpty)
233-
.filter(isSdsPlaceholder)
234-
.toArray();
228+
export const streamPlaceholders = (node: SdsBlock | undefined): Stream<SdsPlaceholder> => {
229+
return stream(getStatements(node)).filter(isSdsAssignment).flatMap(getAssignees).filter(isSdsPlaceholder);
235230
};
236231

237-
export const resultsOrEmpty = (node: SdsResultList | undefined): SdsResult[] => {
232+
export const getResults = (node: SdsResultList | undefined): SdsResult[] => {
238233
return node?.results ?? [];
239234
};
240235

241-
export const statementsOrEmpty = (node: SdsBlock | undefined): SdsStatement[] => {
236+
export const getStatements = (node: SdsBlock | undefined): SdsStatement[] => {
242237
return node?.statements ?? [];
243238
};
244239

245-
export const typeArgumentsOrEmpty = (node: SdsTypeArgumentList | undefined): SdsTypeArgument[] => {
240+
export const getTypeArguments = (node: SdsTypeArgumentList | undefined): SdsTypeArgument[] => {
246241
return node?.typeArguments ?? [];
247242
};
248243

249-
export const typeParametersOrEmpty = (
244+
export const getTypeParameters = (
250245
node: SdsTypeParameterList | SdsNamedTypeDeclaration | undefined,
251246
): SdsTypeParameter[] => {
252247
if (!node) {
@@ -256,9 +251,9 @@ export const typeParametersOrEmpty = (
256251
if (isSdsTypeParameterList(node)) {
257252
return node.typeParameters;
258253
} else if (isSdsClass(node)) {
259-
return typeParametersOrEmpty(node.typeParameterList);
254+
return getTypeParameters(node.typeParameterList);
260255
} else if (isSdsEnumVariant(node)) {
261-
return typeParametersOrEmpty(node.typeParameterList);
256+
return getTypeParameters(node.typeParameterList);
262257
} /* c8 ignore start */ else {
263258
return [];
264259
} /* c8 ignore stop */

src/language/helpers/safe-ds-node-mapper.ts

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,13 @@ import {
3131
import { CallableType, StaticType } from '../typing/model.js';
3232
import { findLocalReferences, getContainerOfType, Stream, stream } from 'langium';
3333
import {
34-
abstractResultsOrEmpty,
35-
argumentsOrEmpty,
34+
getAbstractResults,
35+
getArguments,
3636
isNamedArgument,
3737
isNamedTypeArgument,
38-
parametersOrEmpty,
39-
typeArgumentsOrEmpty,
40-
typeParametersOrEmpty,
38+
getParameters,
39+
getTypeArguments,
40+
getTypeParameters,
4141
} from './nodeProperties.js';
4242

4343
export class SafeDsNodeMapper {
@@ -62,7 +62,7 @@ export class SafeDsNodeMapper {
6262

6363
// Positional argument
6464
const containingAbstractCall = getContainerOfType(node, isSdsAbstractCall)!;
65-
const args = argumentsOrEmpty(containingAbstractCall);
65+
const args = getArguments(containingAbstractCall);
6666
const argumentPosition = node.$containerIndex ?? -1;
6767

6868
// A prior argument is named
@@ -74,7 +74,7 @@ export class SafeDsNodeMapper {
7474

7575
// Find parameter at the same position
7676
const callable = this.callToCallable(containingAbstractCall);
77-
const parameters = parametersOrEmpty(callable);
77+
const parameters = getParameters(callable);
7878
if (argumentPosition < parameters.length) {
7979
return parameters[argumentPosition];
8080
}
@@ -121,7 +121,7 @@ export class SafeDsNodeMapper {
121121
}
122122

123123
// Otherwise, the assignee gets the result at the same position
124-
const abstractResults = abstractResultsOrEmpty(callable);
124+
const abstractResults = getAbstractResults(callable);
125125
return abstractResults[assigneePosition];
126126
}
127127

@@ -228,7 +228,7 @@ export class SafeDsNodeMapper {
228228
return undefined;
229229
}
230230

231-
const typeArguments = typeArgumentsOrEmpty(containingType.typeArgumentList);
231+
const typeArguments = getTypeArguments(containingType.typeArgumentList);
232232
const typeArgumentPosition = node.$containerIndex ?? -1;
233233

234234
// A prior type argument is named
@@ -240,7 +240,7 @@ export class SafeDsNodeMapper {
240240

241241
// Find type parameter at the same position
242242
const namedTypeDeclaration = containingType.declaration.ref;
243-
const typeParameters = typeParametersOrEmpty(namedTypeDeclaration);
243+
const typeParameters = getTypeParameters(namedTypeDeclaration);
244244
return typeParameters[typeArgumentPosition];
245245
}
246246
}

0 commit comments

Comments
 (0)