From b99ab255a9089b8e27015eb5512888a16ca399f7 Mon Sep 17 00:00:00 2001 From: Lars Reimann Date: Tue, 10 Oct 2023 20:47:54 +0200 Subject: [PATCH] feat: error if placeholder is alias for parameter or placeholder (#628) Closes #564 Closes partially #543 ### Summary of Changes To provide a cleaner graphical view, this PR makes it an error if a placeholder just acts as an alias for another placeholder or a parameter. --------- Co-authored-by: megalinter-bot <129584137+megalinter-bot@users.noreply.github.com> --- img/safe-ds_logo_rounded.png | Bin 0 -> 9930 bytes language-configuration.json | 16 +++--- package.json | 54 +++++++++++++++--- .../other/declarations/placeholders.ts | 32 ++++++++++- src/language/validation/safe-ds-validator.ts | 4 +- .../placeholders/alias/main.sdstest | 52 +++++++++++++++++ 6 files changed, 140 insertions(+), 18 deletions(-) create mode 100644 img/safe-ds_logo_rounded.png create mode 100644 tests/resources/validation/other/declarations/placeholders/alias/main.sdstest diff --git a/img/safe-ds_logo_rounded.png b/img/safe-ds_logo_rounded.png new file mode 100644 index 0000000000000000000000000000000000000000..cf515d7abe84a94158fea6c0d64cfb96465c31c1 GIT binary patch literal 9930 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 literal 0 HcmV?d00001 diff --git a/language-configuration.json b/language-configuration.json index 92d75bae8..2d0dd7986 100644 --- a/language-configuration.json +++ b/language-configuration.json @@ -4,26 +4,28 @@ "blockComment": ["/*", "*/"] }, "brackets": [ + ["(", ")"], ["{", "}"], ["[", "]"], - ["(", ")"], + ["<", ">"], ["»", "«"] ], "autoClosingPairs": [ + ["(", ")"], ["{", "}"], ["[", "]"], - ["(", ")"], - ["»", "«"], + ["<", ">"], ["\"", "\""], - ["`", "`"] + ["`", "`"], + ["»", "«"] ], "surroundingPairs": [ + ["(", ")"], ["{", "}"], ["[", "]"], - ["(", ")"], ["<", ">"], - ["»", "«"], ["\"", "\""], - ["`", "`"] + ["`", "`"], + ["»", "«"] ] } diff --git a/package.json b/package.json index d47911955..c7ff558fc 100644 --- a/package.json +++ b/package.json @@ -1,21 +1,59 @@ { "name": "safe-ds", - "displayName": "safe-ds", - "description": "Statically checked Data Science programs.", "version": "0.1.0", + "preview": true, + "publisher": "Safe-DS", + "displayName": "Safe-DS", + "description": "Statically checked Data Science programs.", + "license": "MIT", + "categories": [ + "Programming Languages", + "Machine Learning", + "Data Science" + ], + "keywords": [ + "dsl", + "static checking" + ], + "galleryBanner": { + "color": "#e3e9e9" + }, + "icon": "img/safe-ds_logo_rounded.png", + "homepage": "https://dsl.safeds.com", + "qna": "https://github.com/orgs/Safe-DS/discussions", + "bugs": { + "url": "https://github.com/Safe-DS/DSL/issues" + }, + "repository": { + "type": "git", + "url": "https://github.com/Safe-DS/DSL.git" + }, + "badges": [ + { + "url": "https://github.com/Safe-DS/DSL/actions/workflows/main.yml/badge.svg", + "href": "https://github.com/Safe-DS/DSL/actions/workflows/main.yml", + "description": "Main" + }, + { + "url": "https://codecov.io/gh/Safe-DS/DSL/branch/main/graph/badge.svg?token=ma0ytglhO1", + "href": "https://codecov.io/gh/Safe-DS/DSL", + "description": "codecov" + } + ], "engines": { "vscode": "^1.82.0" }, - "categories": [ - "Programming Languages" - ], "contributes": { "languages": [ { "id": "safe-ds", "aliases": [ "Safe-DS", - "safe-ds" + "safe-ds", + "SafeDS", + "safeds", + "SDS", + "sds" ], "extensions": [ ".sdspipe", @@ -33,14 +71,14 @@ } ] }, + "type": "module", + "main": "out/extension/main.cjs", "files": [ "bin" ], - "type": "module", "bin": { "safe-ds-cli": "./bin/cli" }, - "main": "out/extension/main.cjs", "scripts": { "vscode:prepublish": "npm run build && npm run lint", "build": "tsc -b tsconfig.json && node esbuild.mjs", diff --git a/src/language/validation/other/declarations/placeholders.ts b/src/language/validation/other/declarations/placeholders.ts index 7453fb788..519f912db 100644 --- a/src/language/validation/other/declarations/placeholders.ts +++ b/src/language/validation/other/declarations/placeholders.ts @@ -1,11 +1,41 @@ -import { isSdsBlock, isSdsStatement, SdsPlaceholder } from '../../../generated/ast.js'; +import { + isSdsAssignment, + isSdsBlock, + isSdsParameter, + isSdsPlaceholder, + isSdsReference, + isSdsStatement, + SdsPlaceholder, +} from '../../../generated/ast.js'; import { getContainerOfType, ValidationAcceptor } from 'langium'; import { SafeDsServices } from '../../../safe-ds-module.js'; import { statementsOrEmpty } from '../../../helpers/nodeProperties.js'; import { last } from 'radash'; +export const CODE_PLACEHOLDER_ALIAS = 'placeholder/alias'; export const CODE_PLACEHOLDER_UNUSED = 'placeholder/unused'; +export const placeholdersMustNotBeAnAlias = (node: SdsPlaceholder, accept: ValidationAcceptor): void => { + if (node.$containerIndex ?? 0 > 0) { + return; + } + + const containingAssignment = getContainerOfType(node, isSdsAssignment); + const rhs = containingAssignment?.expression; + if (!isSdsReference(rhs)) { + return; + } + + const referenceTarget = rhs.target.ref; + if (isSdsParameter(referenceTarget) || isSdsPlaceholder(referenceTarget)) { + accept('error', 'Aliases are not allowed to provide a cleaner graphical view.', { + node, + property: 'name', + code: CODE_PLACEHOLDER_ALIAS, + }); + } +}; + export const placeholderShouldBeUsed = (services: SafeDsServices) => (node: SdsPlaceholder, accept: ValidationAcceptor) => { const usages = services.helpers.NodeMapper.placeholderToReferences(node); diff --git a/src/language/validation/safe-ds-validator.ts b/src/language/validation/safe-ds-validator.ts index d0845efd8..1644bb2e3 100644 --- a/src/language/validation/safe-ds-validator.ts +++ b/src/language/validation/safe-ds-validator.ts @@ -61,7 +61,7 @@ import { namedTypeDeclarationShouldNotBeExperimental, referenceTargetShouldNotExperimental, } from './builtins/experimental.js'; -import { placeholderShouldBeUsed } from './other/declarations/placeholders.js'; +import { placeholderShouldBeUsed, placeholdersMustNotBeAnAlias } from './other/declarations/placeholders.js'; import { segmentParameterShouldBeUsed, segmentResultMustBeAssignedExactlyOnce } from './other/declarations/segments.js'; import { lambdaParameterMustNotHaveConstModifier } from './other/expressions/lambdas.js'; import { indexedAccessesShouldBeUsedWithCaution } from './experimentalLanguageFeature.js'; @@ -139,7 +139,7 @@ export const registerValidationChecks = function (services: SafeDsServices) { ], SdsParameterList: [parameterListMustNotHaveRequiredParametersAfterOptionalParameters], SdsPipeline: [pipelineMustContainUniqueNames], - SdsPlaceholder: [placeholderShouldBeUsed(services)], + SdsPlaceholder: [placeholdersMustNotBeAnAlias, placeholderShouldBeUsed(services)], SdsReference: [ referenceTargetMustNotBeAnnotationPipelineOrSchema, referenceTargetShouldNotBeDeprecated(services), diff --git a/tests/resources/validation/other/declarations/placeholders/alias/main.sdstest b/tests/resources/validation/other/declarations/placeholders/alias/main.sdstest new file mode 100644 index 000000000..fe1b02307 --- /dev/null +++ b/tests/resources/validation/other/declarations/placeholders/alias/main.sdstest @@ -0,0 +1,52 @@ +package tests.validation.other.placeholder.alias + +annotation MyAnnotation + +class MyClass { + static attr myAttribute: Int + + static fun myMethod() +} + +enum MyEnum { + MyEnumVariant +} + +fun myFunction() + +pipeline myPipeline {} + +schema MySchema {} + +segment mySegment1() {} + +segment mySegment2(myParameter: Int) { + // $TEST$ no error "Aliases are not allowed to provide a cleaner graphical view." + val »myPlaceholder« = 1; + // $TEST$ no error "Aliases are not allowed to provide a cleaner graphical view." + val »a« = MyAnnotation; + // $TEST$ no error "Aliases are not allowed to provide a cleaner graphical view." + val »b« = MyClass.myAttribute; + // $TEST$ no error "Aliases are not allowed to provide a cleaner graphical view." + val »c« = MyClass; + // $TEST$ no error "Aliases are not allowed to provide a cleaner graphical view." + val »d« = MyEnum; + // $TEST$ no error "Aliases are not allowed to provide a cleaner graphical view." + val »e« = MyEnum.MyEnumVariant; + // $TEST$ no error "Aliases are not allowed to provide a cleaner graphical view." + val »f« = myFunction; + // $TEST$ error "Aliases are not allowed to provide a cleaner graphical view." + // $TEST$ no error "Aliases are not allowed to provide a cleaner graphical view." + val »g1«, val »g2« = myParameter; + // $TEST$ no error "Aliases are not allowed to provide a cleaner graphical view." + val »h« = myPipeline; + // $TEST$ error "Aliases are not allowed to provide a cleaner graphical view." + // $TEST$ no error "Aliases are not allowed to provide a cleaner graphical view." + val »i1«, val »i2« = myPlaceholder; + // $TEST$ no error "Aliases are not allowed to provide a cleaner graphical view." + val »j« = MySchema; + // $TEST$ no error "Aliases are not allowed to provide a cleaner graphical view." + val »k« = mySegment1; + // $TEST$ no error "Aliases are not allowed to provide a cleaner graphical view." + val »l« = unresolved; +}