Skip to content

Commit 551b33d

Browse files
authored
fix: Validation errors when using true or false as prefix of id (#530)
1 parent 2a4b5cc commit 551b33d

File tree

4 files changed

+49
-26
lines changed

4 files changed

+49
-26
lines changed

packages/language/src/generated/ast.ts

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,12 @@ export function isAttributeName(item: unknown): item is AttributeName {
2020
return isDataModelAttributeName(item) || isDataModelFieldAttributeName(item) || isInternalAttributeName(item);
2121
}
2222

23+
export type Boolean = boolean;
24+
25+
export function isBoolean(item: unknown): item is Boolean {
26+
return typeof item === 'boolean';
27+
}
28+
2329
export type BuiltinType = 'BigInt' | 'Boolean' | 'Bytes' | 'DateTime' | 'Decimal' | 'Float' | 'Int' | 'Json' | 'String';
2430

2531
export function isBuiltinType(item: unknown): item is BuiltinType {
@@ -422,7 +428,7 @@ export function isInvocationExpr(item: unknown): item is InvocationExpr {
422428
export interface LiteralExpr extends AstNode {
423429
readonly $container: Argument | ArrayExpr | AttributeArg | BinaryExpr | DataSourceField | FieldInitializer | FunctionDecl | GeneratorField | MemberAccessExpr | PluginField | UnaryExpr | UnsupportedFieldType;
424430
readonly $type: 'LiteralExpr';
425-
value: boolean | number | string
431+
value: Boolean | number | string
426432
}
427433

428434
export const LiteralExpr = 'LiteralExpr';
@@ -856,14 +862,6 @@ export class ZModelAstReflection extends AbstractAstReflection {
856862
]
857863
};
858864
}
859-
case 'LiteralExpr': {
860-
return {
861-
name: 'LiteralExpr',
862-
mandatory: [
863-
{ name: 'value', type: 'boolean' }
864-
]
865-
};
866-
}
867865
case 'Model': {
868866
return {
869867
name: 'Model',

packages/language/src/generated/grammar.ts

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -565,7 +565,7 @@ export const ZModelGrammar = (): Grammar => loadedZModelGrammar ?? (loadedZModel
565565
{
566566
"$type": "RuleCall",
567567
"rule": {
568-
"$ref": "#/rules@56"
568+
"$ref": "#/rules@55"
569569
},
570570
"arguments": []
571571
},
@@ -3258,28 +3258,38 @@ export const ZModelGrammar = (): Grammar => loadedZModelGrammar ?? (loadedZModel
32583258
"wildcard": false
32593259
},
32603260
{
3261-
"$type": "TerminalRule",
3262-
"hidden": true,
3263-
"name": "WS",
3261+
"$type": "ParserRule",
3262+
"name": "Boolean",
3263+
"dataType": "boolean",
32643264
"definition": {
3265-
"$type": "RegexToken",
3266-
"regex": "\\\\s+"
3265+
"$type": "Alternatives",
3266+
"elements": [
3267+
{
3268+
"$type": "Keyword",
3269+
"value": "true"
3270+
},
3271+
{
3272+
"$type": "Keyword",
3273+
"value": "false"
3274+
}
3275+
]
32673276
},
3268-
"fragment": false
3277+
"definesHiddenTokens": false,
3278+
"entry": false,
3279+
"fragment": false,
3280+
"hiddenTokens": [],
3281+
"parameters": [],
3282+
"wildcard": false
32693283
},
32703284
{
32713285
"$type": "TerminalRule",
3272-
"name": "BOOLEAN",
3273-
"type": {
3274-
"$type": "ReturnType",
3275-
"name": "boolean"
3276-
},
3286+
"hidden": true,
3287+
"name": "WS",
32773288
"definition": {
32783289
"$type": "RegexToken",
3279-
"regex": "true|false"
3290+
"regex": "\\\\s+"
32803291
},
3281-
"fragment": false,
3282-
"hidden": false
3292+
"fragment": false
32833293
},
32843294
{
32853295
"$type": "TerminalRule",

packages/language/src/zmodel.langium

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ Expression:
3939
LogicalExpr;
4040

4141
LiteralExpr:
42-
value=(BOOLEAN | NUMBER | STRING);
42+
value=(Boolean | NUMBER | STRING);
4343

4444
ArrayExpr:
4545
'[' (items+=Expression (',' items+=Expression)*)? ']';
@@ -255,8 +255,10 @@ ExpressionType returns string:
255255
BuiltinType returns string:
256256
'String' | 'Boolean' | 'Int' | 'BigInt' | 'Float' | 'Decimal' | 'DateTime' | 'Json' | 'Bytes';
257257

258+
Boolean returns boolean:
259+
'true' | 'false';
260+
258261
hidden terminal WS: /\s+/;
259-
terminal BOOLEAN returns boolean: /true|false/;
260262
terminal NULL: 'null';
261263
terminal THIS: 'this';
262264
terminal ID: /[_a-zA-Z][\w_]*/;

packages/schema/tests/schema/parser.test.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -496,4 +496,17 @@ describe('Parsing Tests', () => {
496496
`;
497497
await loadModel(content, false);
498498
});
499+
500+
it('boolean prefix id', async () => {
501+
const content = `
502+
model trueModel {
503+
id String @id
504+
isPublic Boolean @default(false)
505+
trueText String?
506+
falseText String?
507+
@@allow('all', isPublic == true)
508+
}
509+
`;
510+
await loadModel(content, false);
511+
});
499512
});

0 commit comments

Comments
 (0)