From 59df6f3c04e5ecb6ddc6002f9710bf413e9065fb Mon Sep 17 00:00:00 2001 From: Gideon Koenig Date: Tue, 21 Jan 2025 21:59:26 +0100 Subject: [PATCH 1/2] fix: type issue --- .../src/language/graphical-editor/ast-parser/parser.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/safe-ds-lang/src/language/graphical-editor/ast-parser/parser.ts b/packages/safe-ds-lang/src/language/graphical-editor/ast-parser/parser.ts index 3a8a259dc..3e9372f5b 100644 --- a/packages/safe-ds-lang/src/language/graphical-editor/ast-parser/parser.ts +++ b/packages/safe-ds-lang/src/language/graphical-editor/ast-parser/parser.ts @@ -116,7 +116,9 @@ export class Parser { const pipeline = pipelines[0]!; const block = pipeline.body; const statementList: SdsStatement[] = block.statements; - statementList.forEach((statement) => Statement.parse(statement, this)); + statementList.forEach((statement) => { + Statement.parse(statement, this); + }); this.graph.uniquePath = this.getUniquePath(pipeline); this.graph.name = pipeline.name; From a0cc4ec9c74a6dcd228edf22e5c13aba6636beae Mon Sep 17 00:00:00 2001 From: Gideon Koenig Date: Tue, 21 Jan 2025 22:53:57 +0100 Subject: [PATCH 2/2] fix: circular imports --- .../graphical-editor/ast-parser/argument.ts | 2 +- .../graphical-editor/ast-parser/call.ts | 2 +- .../graphical-editor/ast-parser/parser.ts | 3 +- .../graphical-editor/ast-parser/segment.ts | 6 ++- .../graphical-editor/ast-parser/statement.ts | 2 +- .../graphical-editor/ast-parser/utils.ts | 2 +- .../src/language/graphical-editor/global.ts | 40 +------------------ .../graphical-editor-provider.ts | 5 ++- .../src/language/graphical-editor/types.ts | 38 ++++++++++++++++++ 9 files changed, 54 insertions(+), 46 deletions(-) create mode 100644 packages/safe-ds-lang/src/language/graphical-editor/types.ts diff --git a/packages/safe-ds-lang/src/language/graphical-editor/ast-parser/argument.ts b/packages/safe-ds-lang/src/language/graphical-editor/ast-parser/argument.ts index 0f7e226c8..f440f6937 100644 --- a/packages/safe-ds-lang/src/language/graphical-editor/ast-parser/argument.ts +++ b/packages/safe-ds-lang/src/language/graphical-editor/ast-parser/argument.ts @@ -1,10 +1,10 @@ import { isSdsLiteral, SdsArgument } from '../../generated/ast.js'; -import { CustomError } from '../global.js'; import { Call } from './call.js'; import { Placeholder } from './placeholder.js'; import { Expression, GenericExpression } from './expression.js'; import { Parameter } from './parameter.js'; import { Parser } from './parser.js'; +import { CustomError } from '../types.js'; export class Argument { constructor( diff --git a/packages/safe-ds-lang/src/language/graphical-editor/ast-parser/call.ts b/packages/safe-ds-lang/src/language/graphical-editor/ast-parser/call.ts index c50c202d2..307a71e10 100644 --- a/packages/safe-ds-lang/src/language/graphical-editor/ast-parser/call.ts +++ b/packages/safe-ds-lang/src/language/graphical-editor/ast-parser/call.ts @@ -15,7 +15,6 @@ import { isSdsReference, isSdsSegment, } from '../../generated/ast.js'; -import { CustomError } from '../global.js'; import { Argument } from './argument.js'; import { Edge, Port } from './edge.js'; import { GenericExpression } from './expression.js'; @@ -24,6 +23,7 @@ import { Placeholder } from './placeholder.js'; import { Result } from './result.js'; import { filterErrors } from './utils.js'; import { Parser } from './parser.js'; +import { CustomError } from '../types.js'; export class Call { private constructor( diff --git a/packages/safe-ds-lang/src/language/graphical-editor/ast-parser/parser.ts b/packages/safe-ds-lang/src/language/graphical-editor/ast-parser/parser.ts index 3e9372f5b..c1850e426 100644 --- a/packages/safe-ds-lang/src/language/graphical-editor/ast-parser/parser.ts +++ b/packages/safe-ds-lang/src/language/graphical-editor/ast-parser/parser.ts @@ -1,12 +1,13 @@ import { ILexingError, IRecognitionException } from 'chevrotain'; import { URI, AstNode, LangiumDocument, AstNodeLocator } from 'langium'; import { SafeDsLogger } from '../../communication/safe-ds-messaging-provider.js'; -import { CustomError, Graph, Segment } from '../global.js'; import { SdsModule, isSdsPipeline, SdsStatement, isSdsSegment, SdsAnnotatedObject } from '../../generated/ast.js'; import { documentToJson, saveJson } from './tools/debug-utils.js'; import { Statement } from './statement.js'; import { SafeDsAnnotations } from '../../builtins/safe-ds-annotations.js'; import { SafeDsTypeComputer } from '../../typing/safe-ds-type-computer.js'; +import { CustomError, Graph } from '../types.js'; +import { Segment } from './segment.js'; export class Parser { private lastId: number; diff --git a/packages/safe-ds-lang/src/language/graphical-editor/ast-parser/segment.ts b/packages/safe-ds-lang/src/language/graphical-editor/ast-parser/segment.ts index 59fb027a6..5389cd683 100644 --- a/packages/safe-ds-lang/src/language/graphical-editor/ast-parser/segment.ts +++ b/packages/safe-ds-lang/src/language/graphical-editor/ast-parser/segment.ts @@ -1,7 +1,11 @@ import { SdsSegment, SdsStatement } from '../../generated/ast.js'; -import { Call, CustomError, Edge, GenericExpression, Graph, Placeholder } from '../global.js'; +import { CustomError, Graph } from '../types.js'; +import { Call } from './call.js'; +import { Edge } from './edge.js'; +import { GenericExpression } from './expression.js'; import { Parameter } from './parameter.js'; import { Parser } from './parser.js'; +import { Placeholder } from './placeholder.js'; import { Result } from './result.js'; import { Statement } from './statement.js'; import { filterErrors } from './utils.js'; diff --git a/packages/safe-ds-lang/src/language/graphical-editor/ast-parser/statement.ts b/packages/safe-ds-lang/src/language/graphical-editor/ast-parser/statement.ts index 13b207e93..418dd8499 100644 --- a/packages/safe-ds-lang/src/language/graphical-editor/ast-parser/statement.ts +++ b/packages/safe-ds-lang/src/language/graphical-editor/ast-parser/statement.ts @@ -7,7 +7,6 @@ import { isSdsWildcard, isSdsYield, } from '../../generated/ast.js'; -import { CustomError } from '../global.js'; import { Call } from './call.js'; import { Edge, Port } from './edge.js'; import { Expression, GenericExpression } from './expression.js'; @@ -17,6 +16,7 @@ import { Result } from './result.js'; import { SegmentGroupId } from './segment.js'; import { zip } from './utils.js'; import { Parser } from './parser.js'; +import { CustomError } from '../types.js'; export class Statement { public static parse(node: SdsStatement, parser: Parser) { diff --git a/packages/safe-ds-lang/src/language/graphical-editor/ast-parser/utils.ts b/packages/safe-ds-lang/src/language/graphical-editor/ast-parser/utils.ts index d53beb879..595150342 100644 --- a/packages/safe-ds-lang/src/language/graphical-editor/ast-parser/utils.ts +++ b/packages/safe-ds-lang/src/language/graphical-editor/ast-parser/utils.ts @@ -1,4 +1,4 @@ -import { CustomError } from '../global.js'; +import { CustomError } from '../types.js'; export const zip = (arrayA: A[], arrayB: B[]): [A, B][] => { const minLength = Math.min(arrayA.length, arrayB.length); diff --git a/packages/safe-ds-lang/src/language/graphical-editor/global.ts b/packages/safe-ds-lang/src/language/graphical-editor/global.ts index b3bdf9ec2..11ca3bd0a 100644 --- a/packages/safe-ds-lang/src/language/graphical-editor/global.ts +++ b/packages/safe-ds-lang/src/language/graphical-editor/global.ts @@ -1,8 +1,5 @@ -import { Call } from './ast-parser/call.js'; -import { GenericExpression } from './ast-parser/expression.js'; -import { Edge } from './ast-parser/edge.js'; -import { Placeholder } from './ast-parser/placeholder.js'; import { Segment } from './ast-parser/segment.js'; +import { Graph, CustomError } from './types.js'; export { SegmentGroupId } from './ast-parser/segment.js'; export { Segment } from './ast-parser/segment.js'; @@ -12,43 +9,10 @@ export { GenericExpression } from './ast-parser/expression.js'; export { Edge } from './ast-parser/edge.js'; export { Parameter } from './ast-parser/parameter.js'; export { Result } from './ast-parser/result.js'; +export { Graph, Buildin, CustomError } from './types.js'; export interface Collection { pipeline: Graph; segmentList: Segment[]; errorList: CustomError[]; } - -export class Graph { - constructor( - public readonly type: 'segment' | 'pipeline', - public readonly placeholderList: Placeholder[] = [], - public readonly callList: Call[] = [], - public readonly genericExpressionList: GenericExpression[] = [], - public readonly edgeList: Edge[] = [], - public uniquePath: string = '', - public name: string = '', - ) {} -} - -export class Buildin { - constructor( - public readonly name: string, - public readonly parent: string | undefined, - public readonly category: - | 'DataImport' - | 'DataExport' - | 'DataProcessing' - | 'DataExploration' - | 'Modeling' - | 'ModelEvaluation' - | (string & Record), - ) {} -} - -export class CustomError { - constructor( - public readonly action: 'block' | 'notify', - public readonly message: string, - ) {} -} diff --git a/packages/safe-ds-lang/src/language/graphical-editor/graphical-editor-provider.ts b/packages/safe-ds-lang/src/language/graphical-editor/graphical-editor-provider.ts index 2e6211b97..53238d77c 100644 --- a/packages/safe-ds-lang/src/language/graphical-editor/graphical-editor-provider.ts +++ b/packages/safe-ds-lang/src/language/graphical-editor/graphical-editor-provider.ts @@ -1,5 +1,5 @@ import { SafeDsLogger, SafeDsMessagingProvider } from '../communication/safe-ds-messaging-provider.js'; -import { SafeDsServices } from '../safe-ds-module.js'; +import { type SafeDsServices } from '../safe-ds-module.js'; import { Uri } from 'vscode'; import { extname } from 'path'; import { @@ -23,7 +23,7 @@ import { isSdsSegment, } from '../generated/ast.js'; import { Connection, DidSaveTextDocumentParams } from 'vscode-languageserver'; -import { Buildin, Collection } from './global.js'; +import { Collection } from './global.js'; import { GraphicalEditorCloseSyncChannelRequest, GraphicalEditorGetBuildinsRequest, @@ -36,6 +36,7 @@ import { isPrivate } from '../helpers/nodeProperties.js'; import { SafeDsAnnotations } from '../builtins/safe-ds-annotations.js'; import { Parser } from './ast-parser/parser.js'; import { SafeDsTypeComputer } from '../typing/safe-ds-type-computer.js'; +import { Buildin } from './types.js'; export class SafeDsGraphicalEditorProvider { private readonly logger: SafeDsLogger; diff --git a/packages/safe-ds-lang/src/language/graphical-editor/types.ts b/packages/safe-ds-lang/src/language/graphical-editor/types.ts new file mode 100644 index 000000000..71132d429 --- /dev/null +++ b/packages/safe-ds-lang/src/language/graphical-editor/types.ts @@ -0,0 +1,38 @@ +import { Call } from './ast-parser/call.js'; +import { Edge } from './ast-parser/edge.js'; +import { GenericExpression } from './ast-parser/expression.js'; +import { Placeholder } from './ast-parser/placeholder.js'; + +export class Graph { + constructor( + public readonly type: 'segment' | 'pipeline', + public readonly placeholderList: Placeholder[] = [], + public readonly callList: Call[] = [], + public readonly genericExpressionList: GenericExpression[] = [], + public readonly edgeList: Edge[] = [], + public uniquePath: string = '', + public name: string = '', + ) {} +} + +export class Buildin { + constructor( + public readonly name: string, + public readonly parent: string | undefined, + public readonly category: + | 'DataImport' + | 'DataExport' + | 'DataProcessing' + | 'DataExploration' + | 'Modeling' + | 'ModelEvaluation' + | (string & Record), + ) {} +} + +export class CustomError { + constructor( + public readonly action: 'block' | 'notify', + public readonly message: string, + ) {} +}