Skip to content

Commit a219167

Browse files
committed
adding missing cases for Identifiers.
1 parent 09b913f commit a219167

7 files changed

Lines changed: 36 additions & 21 deletions

File tree

src/slang-nodes/AssignmentExpression.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1+
import {
2+
NonterminalKind,
3+
TerminalKind
4+
} from '@nomicfoundation/slang/kinds/index.js';
15
import { doc } from 'prettier';
2-
import { NonterminalKind } from '@nomicfoundation/slang/kinds/index.js';
36
import { isBinaryOperation } from '../slang-utils/is-binary-operation.js';
47
import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js';
58
import { Expression } from './Expression.js';
@@ -46,7 +49,7 @@ export class AssignmentExpression implements SlangNode {
4649
return [
4750
path.call(print, 'leftOperand'),
4851
` ${this.operator}`,
49-
typeof this.rightOperand.variant !== 'string' &&
52+
this.rightOperand.variant.kind !== TerminalKind.Identifier &&
5053
isBinaryOperation(this.rightOperand.variant)
5154
? group(indent([line, path.call(print, 'rightOperand')]))
5255
: [' ', path.call(print, 'rightOperand')]

src/slang-nodes/ExperimentalFeature.ts

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
1-
import { NonterminalKind } from '@nomicfoundation/slang/kinds/index.js';
1+
import {
2+
NonterminalKind,
3+
TerminalKind
4+
} from '@nomicfoundation/slang/kinds/index.js';
25
import { TerminalNode } from '@nomicfoundation/slang/cst/index.js';
36
import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js';
47
import { StringLiteral } from './StringLiteral.js';
8+
import { Identifier } from './Identifier.js';
59

610
import type * as ast from '@nomicfoundation/slang/ast';
711
import type { AstPath, Doc, ParserOptions } from 'prettier';
@@ -15,7 +19,7 @@ export class ExperimentalFeature implements SlangNode {
1519

1620
loc;
1721

18-
variant: StringLiteral | string;
22+
variant: StringLiteral | Identifier;
1923

2024
constructor(
2125
ast: ast.ExperimentalFeature,
@@ -27,21 +31,19 @@ export class ExperimentalFeature implements SlangNode {
2731

2832
this.variant =
2933
ast.variant instanceof TerminalNode
30-
? ast.variant.text
34+
? new Identifier(ast.variant, offsets[0])
3135
: new StringLiteral(ast.variant, offsets[0], options);
3236

3337
metadata = updateMetadata(
3438
metadata,
35-
typeof this.variant === 'string' ? [] : [this.variant]
39+
this.variant.kind === TerminalKind.Identifier ? [] : [this.variant]
3640
);
3741

3842
this.comments = metadata.comments;
3943
this.loc = metadata.loc;
4044
}
4145

4246
print(path: AstPath<ExperimentalFeature>, print: PrintFunction): Doc {
43-
return typeof this.variant === 'string'
44-
? this.variant
45-
: path.call(print, 'variant');
47+
return path.call(print, 'variant');
4648
}
4749
}

src/slang-nodes/Expression.ts

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
import { NonterminalKind } from '@nomicfoundation/slang/kinds/index.js';
1+
import {
2+
NonterminalKind,
3+
TerminalKind
4+
} from '@nomicfoundation/slang/kinds/index.js';
25
import { TerminalNode } from '@nomicfoundation/slang/cst/index.js';
36
import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js';
47
import { AssignmentExpression } from './AssignmentExpression.js';
@@ -28,6 +31,7 @@ import { HexNumberExpression } from './HexNumberExpression.js';
2831
import { DecimalNumberExpression } from './DecimalNumberExpression.js';
2932
import { StringExpression } from './StringExpression.js';
3033
import { ElementaryType } from './ElementaryType.js';
34+
import { Identifier } from './Identifier.js';
3135

3236
import type * as ast from '@nomicfoundation/slang/ast';
3337
import type { AstPath, Doc, ParserOptions } from 'prettier';
@@ -69,7 +73,7 @@ export class Expression implements SlangNode {
6973
| DecimalNumberExpression
7074
| StringExpression
7175
| ElementaryType
72-
| string;
76+
| Identifier;
7377

7478
constructor(
7579
ast: ast.Expression,
@@ -80,7 +84,7 @@ export class Expression implements SlangNode {
8084
const { offsets } = metadata;
8185

8286
if (ast.variant instanceof TerminalNode) {
83-
this.variant = ast.variant.text;
87+
this.variant = new Identifier(ast.variant, offsets[0]);
8488
} else {
8589
switch (ast.variant.cst.kind) {
8690
case NonterminalKind.AssignmentExpression:
@@ -276,16 +280,14 @@ export class Expression implements SlangNode {
276280

277281
metadata = updateMetadata(
278282
metadata,
279-
typeof this.variant === 'string' ? [] : [this.variant]
283+
this.variant.kind === TerminalKind.Identifier ? [] : [this.variant]
280284
);
281285

282286
this.comments = metadata.comments;
283287
this.loc = metadata.loc;
284288
}
285289

286290
print(path: AstPath<Expression>, print: PrintFunction): Doc {
287-
return typeof this.variant === 'string'
288-
? this.variant
289-
: path.call(print, 'variant');
291+
return path.call(print, 'variant');
290292
}
291293
}

src/slang-nodes/TupleValues.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
import { NonterminalKind } from '@nomicfoundation/slang/kinds/index.js';
1+
import {
2+
NonterminalKind,
3+
TerminalKind
4+
} from '@nomicfoundation/slang/kinds/index.js';
25
import { printSeparatedList } from '../slang-printers/print-separated-list.js';
36
import { isBinaryOperation } from '../slang-utils/is-binary-operation.js';
47
import { getNodeMetadata, updateMetadata } from '../slang-utils/metadata.js';
@@ -42,7 +45,7 @@ export class TupleValues implements SlangNode {
4245
print(path: AstPath<TupleValues>, print: PrintFunction): Doc {
4346
return this.items.length === 1 &&
4447
this.items[0].expression &&
45-
typeof this.items[0].expression.variant !== 'string' &&
48+
this.items[0].expression.variant.kind !== TerminalKind.Identifier &&
4649
isBinaryOperation(this.items[0].expression.variant)
4750
? path.map(print, 'items')
4851
: printSeparatedList(path.map(print, 'items'));

src/slang-nodes/VersionExpression.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ export class VersionExpression implements SlangNode {
2323
const { offsets } = metadata;
2424

2525
if (ast.variant instanceof TerminalNode) {
26+
// TODO: test whether this is a Identifier
2627
this.variant = ast.variant.text;
2728
} else {
2829
switch (ast.variant.cst.kind) {

src/slang-printers/create-binary-operation-printer.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { TerminalKind } from '@nomicfoundation/slang/kinds/index.js';
12
import { doc } from 'prettier';
23
import { isBinaryOperation } from '../slang-utils/is-binary-operation.js';
34

@@ -18,7 +19,7 @@ function rightOperandPrint(
1819
// operand like - 1 on its own line
1920
const shouldGroup =
2021
!(
21-
typeof node.leftOperand.variant !== 'string' &&
22+
node.leftOperand.variant.kind !== TerminalKind.Identifier &&
2223
isBinaryOperation(node.leftOperand.variant)
2324
) && !isBinaryOperation(path.getNode(2) as StrictAstNode);
2425

src/slang-utils/create-hug-function.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
import { NonterminalKind } from '@nomicfoundation/slang/kinds/index.js';
1+
import {
2+
NonterminalKind,
3+
TerminalKind
4+
} from '@nomicfoundation/slang/kinds/index.js';
25
import { Expression } from '../slang-nodes/Expression.js';
36
import { TupleExpression } from '../slang-nodes/TupleExpression.js';
47
import { TupleValues } from '../slang-nodes/TupleValues.js';
@@ -17,7 +20,7 @@ export function createHugFunction(
1720
const operators = new Set(huggableOperators);
1821
return (node: Expression): Expression => {
1922
if (
20-
typeof node.variant !== 'string' &&
23+
node.variant.kind !== TerminalKind.Identifier &&
2124
isBinaryOperation(node.variant) &&
2225
operators.has(node.variant.operator)
2326
) {

0 commit comments

Comments
 (0)