diff --git a/packages/language/src/generated/ast.ts b/packages/language/src/generated/ast.ts index 991ac6f59..d5f462277 100644 --- a/packages/language/src/generated/ast.ts +++ b/packages/language/src/generated/ast.ts @@ -94,10 +94,10 @@ export function isReferenceTarget(item: unknown): item is ReferenceTarget { return reflection.isInstance(item, ReferenceTarget); } -export type RegularID = 'abstract' | 'attribute' | 'datasource' | 'enum' | 'in' | 'model' | 'plugin' | 'sort' | string; +export type RegularID = 'abstract' | 'attribute' | 'datasource' | 'enum' | 'import' | 'in' | 'model' | 'plugin' | 'sort' | 'view' | string; export function isRegularID(item: unknown): item is RegularID { - return item === 'model' || item === 'enum' || item === 'attribute' || item === 'datasource' || item === 'plugin' || item === 'abstract' || item === 'in' || item === 'sort' || (typeof item === 'string' && (/[_a-zA-Z][\w_]*/.test(item))); + return item === 'model' || item === 'enum' || item === 'attribute' || item === 'datasource' || item === 'plugin' || item === 'abstract' || item === 'in' || item === 'sort' || item === 'view' || item === 'import' || (typeof item === 'string' && (/[_a-zA-Z][\w_]*/.test(item))); } export type TypeDeclaration = DataModel | Enum; diff --git a/packages/language/src/generated/grammar.ts b/packages/language/src/generated/grammar.ts index 986be8c33..7bdf53b6a 100644 --- a/packages/language/src/generated/grammar.ts +++ b/packages/language/src/generated/grammar.ts @@ -2771,6 +2771,14 @@ export const ZModelGrammar = (): Grammar => loadedZModelGrammar ?? (loadedZModel { "$type": "Keyword", "value": "sort" + }, + { + "$type": "Keyword", + "value": "view" + }, + { + "$type": "Keyword", + "value": "import" } ] }, diff --git a/packages/language/src/zmodel.langium b/packages/language/src/zmodel.langium index 45bd3034f..5f1aa5008 100644 --- a/packages/language/src/zmodel.langium +++ b/packages/language/src/zmodel.langium @@ -229,7 +229,7 @@ QualifiedName returns string: // https://github.com/langium/langium/discussions/1012 RegularID returns string: // include keywords that we'd like to work as ID in most places - ID | 'model' | 'enum' | 'attribute' | 'datasource' | 'plugin' | 'abstract' | 'in' | 'sort'; + ID | 'model' | 'enum' | 'attribute' | 'datasource' | 'plugin' | 'abstract' | 'in' | 'sort' | 'view' | 'import'; // internal attribute InternalAttributeName returns string: diff --git a/tests/integration/tests/regression/issue-735.test.ts b/tests/integration/tests/regression/issue-735.test.ts new file mode 100644 index 000000000..ddfd251c5 --- /dev/null +++ b/tests/integration/tests/regression/issue-735.test.ts @@ -0,0 +1,21 @@ +import { loadSchema } from '@zenstackhq/testtools'; + +describe('Regression: issue 735', () => { + it('regression', async () => { + await loadSchema( + ` + model MyModel { + id String @id @default(cuid()) + view String + import Int + } + + model view { + id String @id @default(cuid()) + name String + } + `, + { pushDb: false } + ); + }); +});