11import { NonterminalKind } from '@nomicfoundation/slang/cst' ;
22import { util } from 'prettier' ;
3+ import { createKindCheckFunction } from '../../slang-utils/create-kind-check-function.js' ;
4+ import { TerminalNode } from '../../slang-nodes/TerminalNode.js' ;
35
6+ import type { Expression } from '../../slang-nodes/Expression.js' ;
7+ import type { PrintableNode } from '../../slang-nodes/types.d.ts' ;
48import type { HandlerParams } from './types.d.ts' ;
59
610const { addLeadingComment } = util ;
711
12+ const isExpression = createKindCheckFunction ( [
13+ NonterminalKind . AssignmentExpression ,
14+ NonterminalKind . ConditionalExpression ,
15+ NonterminalKind . OrExpression ,
16+ NonterminalKind . AndExpression ,
17+ NonterminalKind . EqualityExpression ,
18+ NonterminalKind . InequalityExpression ,
19+ NonterminalKind . BitwiseOrExpression ,
20+ NonterminalKind . BitwiseXorExpression ,
21+ NonterminalKind . BitwiseAndExpression ,
22+ NonterminalKind . ShiftExpression ,
23+ NonterminalKind . AdditiveExpression ,
24+ NonterminalKind . MultiplicativeExpression ,
25+ NonterminalKind . ExponentiationExpression ,
26+ NonterminalKind . PostfixExpression ,
27+ NonterminalKind . PrefixExpression ,
28+ NonterminalKind . FunctionCallExpression ,
29+ NonterminalKind . CallOptionsExpression ,
30+ NonterminalKind . MemberAccessExpression ,
31+ NonterminalKind . IndexAccessExpression ,
32+ NonterminalKind . NewExpression ,
33+ NonterminalKind . TupleExpression ,
34+ NonterminalKind . TypeExpression ,
35+ NonterminalKind . ArrayExpression ,
36+ NonterminalKind . HexNumberExpression ,
37+ NonterminalKind . DecimalNumberExpression ,
38+ NonterminalKind . StringLiteral ,
39+ NonterminalKind . StringLiterals ,
40+ NonterminalKind . HexStringLiteral ,
41+ NonterminalKind . HexStringLiterals ,
42+ NonterminalKind . UnicodeStringLiterals ,
43+ NonterminalKind . AddressType
44+ ] ) as ( node : PrintableNode ) => node is Expression [ 'variant' ] ;
45+
846export default function handleStorageLayoutSpecifierComments ( {
947 enclosingNode,
1048 followingNode,
@@ -14,7 +52,10 @@ export default function handleStorageLayoutSpecifierComments({
1452 return false ;
1553 }
1654
17- if ( followingNode ?. kind === NonterminalKind . Expression ) {
55+ if (
56+ followingNode &&
57+ ( isExpression ( followingNode ) || followingNode instanceof TerminalNode )
58+ ) {
1859 addLeadingComment ( followingNode , comment ) ;
1960 return true ;
2061 }
0 commit comments