Skip to content

Commit

Permalink
feat: mark constraint lists as experimental (#752)
Browse files Browse the repository at this point in the history
### Summary of Changes

When we add more constraint types (e.g. #18), we might also have to
change the overall concept. Thus, constraint lists are now marked as
experimental (which also applies to the contained constraints).
  • Loading branch information
lars-reimann authored Nov 10, 2023
1 parent dc14223 commit d48e1e0
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import {
isSdsIndexedAccess,
isSdsMap,
isSdsUnionType,
SdsConstraintList,
SdsIndexedAccess,
SdsLiteralType,
SdsMap,
Expand All @@ -11,6 +12,14 @@ import { hasContainerOfType, ValidationAcceptor } from 'langium';

export const CODE_EXPERIMENTAL_LANGUAGE_FEATURE = 'experimental/language-feature';

export const constraintListsShouldBeUsedWithCaution = (node: SdsConstraintList, accept: ValidationAcceptor): void => {
accept('warning', 'Constraint lists & constraints are experimental and may change without prior notice.', {
node,
keyword: 'where',
code: CODE_EXPERIMENTAL_LANGUAGE_FEATURE,
});
};

export const indexedAccessesShouldBeUsedWithCaution = (node: SdsIndexedAccess, accept: ValidationAcceptor): void => {
if (hasContainerOfType(node.$container, isSdsIndexedAccess)) {
return;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import {
import { singleUseAnnotationsMustNotBeRepeated } from './builtins/repeatable.js';
import { annotationCallMustHaveCorrectTarget, targetShouldNotHaveDuplicateEntries } from './builtins/target.js';
import {
constraintListsShouldBeUsedWithCaution,
indexedAccessesShouldBeUsedWithCaution,
literalTypesShouldBeUsedWithCaution,
mapsShouldBeUsedWithCaution,
Expand Down Expand Up @@ -221,7 +222,7 @@ export const registerValidationChecks = function (services: SafeDsServices) {
classMustNotInheritItself(services),
],
SdsClassBody: [classBodyShouldNotBeEmpty],
SdsConstraintList: [constraintListShouldNotBeEmpty],
SdsConstraintList: [constraintListsShouldBeUsedWithCaution, constraintListShouldNotBeEmpty],
SdsDeclaration: [
nameMustNotStartWithCodegenPrefix,
nameShouldHaveCorrectCasing,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package tests.validation.experimentalLanguageFeature.constraintLists

// $TEST$ warning "Constraint lists & constraints are experimental and may change without prior notice."
fun myFunction() »where« {}

0 comments on commit d48e1e0

Please sign in to comment.