diff --git a/src/slang-nodes/ConstructorAttribute.ts b/src/slang-nodes/ConstructorAttribute.ts index c65382dc6..5414d6d5c 100644 --- a/src/slang-nodes/ConstructorAttribute.ts +++ b/src/slang-nodes/ConstructorAttribute.ts @@ -2,7 +2,7 @@ import { NonterminalKind, TerminalNode as SlangTerminalNode } from '@nomicfoundation/slang/cst'; -import { PolymorphicNode } from './PolymorphicNode.js'; +import { SlangNode } from './SlangNode.js'; import { ModifierInvocation } from './ModifierInvocation.js'; import { TerminalNode } from './TerminalNode.js'; @@ -10,7 +10,7 @@ import type * as ast from '@nomicfoundation/slang/ast'; import type { ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -export class ConstructorAttribute extends PolymorphicNode { +export class ConstructorAttribute extends SlangNode { readonly kind = NonterminalKind.ConstructorAttribute; variant: ModifierInvocation | TerminalNode; diff --git a/src/slang-nodes/ConstructorAttributes.ts b/src/slang-nodes/ConstructorAttributes.ts index 1182e973c..7c72b9264 100644 --- a/src/slang-nodes/ConstructorAttributes.ts +++ b/src/slang-nodes/ConstructorAttributes.ts @@ -1,7 +1,7 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { doc } from 'prettier'; import { sortFunctionAttributes } from '../slang-utils/sort-function-attributes.js'; -import { printVariant } from '../slang-printers/print-variant.js'; +import { extractVariant } from '../slang-utils/extract-variant.js'; import { SlangNode } from './SlangNode.js'; import { ConstructorAttribute } from './ConstructorAttribute.js'; @@ -15,19 +15,19 @@ const { line } = doc.builders; export class ConstructorAttributes extends SlangNode { readonly kind = NonterminalKind.ConstructorAttributes; - items: ConstructorAttribute[]; + items: ConstructorAttribute['variant'][]; constructor(ast: ast.ConstructorAttributes, options: ParserOptions) { super(ast, true); - this.items = ast.items.map( - (item) => new ConstructorAttribute(item, options) + this.items = ast.items.map((item) => + extractVariant(new ConstructorAttribute(item, options)) ); this.items.sort(sortFunctionAttributes); } print(path: AstPath, print: PrintFunction): Doc { - return path.map(printVariant(print), 'items').map((item) => [line, item]); + return path.map((item) => [line, print(item)], 'items'); } } diff --git a/src/slang-nodes/FallbackFunctionAttribute.ts b/src/slang-nodes/FallbackFunctionAttribute.ts index 40d89314a..e696e7e41 100644 --- a/src/slang-nodes/FallbackFunctionAttribute.ts +++ b/src/slang-nodes/FallbackFunctionAttribute.ts @@ -3,7 +3,7 @@ import { NonterminalKind, TerminalNode as SlangTerminalNode } from '@nomicfoundation/slang/cst'; -import { PolymorphicNode } from './PolymorphicNode.js'; +import { SlangNode } from './SlangNode.js'; import { ModifierInvocation } from './ModifierInvocation.js'; import { OverrideSpecifier } from './OverrideSpecifier.js'; import { TerminalNode } from './TerminalNode.js'; @@ -25,7 +25,7 @@ function createNonterminalVariant( return exhaustiveCheck; } -export class FallbackFunctionAttribute extends PolymorphicNode { +export class FallbackFunctionAttribute extends SlangNode { readonly kind = NonterminalKind.FallbackFunctionAttribute; variant: ModifierInvocation | OverrideSpecifier | TerminalNode; diff --git a/src/slang-nodes/FallbackFunctionAttributes.ts b/src/slang-nodes/FallbackFunctionAttributes.ts index 9fb024c1e..c603b6ab0 100644 --- a/src/slang-nodes/FallbackFunctionAttributes.ts +++ b/src/slang-nodes/FallbackFunctionAttributes.ts @@ -1,7 +1,7 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { doc } from 'prettier'; import { sortFunctionAttributes } from '../slang-utils/sort-function-attributes.js'; -import { printVariant } from '../slang-printers/print-variant.js'; +import { extractVariant } from '../slang-utils/extract-variant.js'; import { SlangNode } from './SlangNode.js'; import { FallbackFunctionAttribute } from './FallbackFunctionAttribute.js'; @@ -15,7 +15,7 @@ const { line } = doc.builders; export class FallbackFunctionAttributes extends SlangNode { readonly kind = NonterminalKind.FallbackFunctionAttributes; - items: FallbackFunctionAttribute[]; + items: FallbackFunctionAttribute['variant'][]; constructor( ast: ast.FallbackFunctionAttributes, @@ -23,14 +23,14 @@ export class FallbackFunctionAttributes extends SlangNode { ) { super(ast, true); - this.items = ast.items.map( - (item) => new FallbackFunctionAttribute(item, options) + this.items = ast.items.map((item) => + extractVariant(new FallbackFunctionAttribute(item, options)) ); this.items.sort(sortFunctionAttributes); } print(path: AstPath, print: PrintFunction): Doc { - return path.map(printVariant(print), 'items').map((item) => [line, item]); + return path.map((item) => [line, print(item)], 'items'); } } diff --git a/src/slang-nodes/FallbackFunctionDefinition.ts b/src/slang-nodes/FallbackFunctionDefinition.ts index 49bd79f50..31d067bcd 100644 --- a/src/slang-nodes/FallbackFunctionDefinition.ts +++ b/src/slang-nodes/FallbackFunctionDefinition.ts @@ -46,7 +46,7 @@ export class FallbackFunctionDefinition extends SlangNode { } cleanModifierInvocationArguments(): void { - for (const { variant: attribute } of this.attributes.items) { + for (const attribute of this.attributes.items) { if ( typeof attribute !== 'string' && attribute.kind === NonterminalKind.ModifierInvocation diff --git a/src/slang-nodes/FunctionAttribute.ts b/src/slang-nodes/FunctionAttribute.ts index c42c7337b..a4d36f472 100644 --- a/src/slang-nodes/FunctionAttribute.ts +++ b/src/slang-nodes/FunctionAttribute.ts @@ -3,7 +3,7 @@ import { NonterminalKind, TerminalNode as SlangTerminalNode } from '@nomicfoundation/slang/cst'; -import { PolymorphicNode } from './PolymorphicNode.js'; +import { SlangNode } from './SlangNode.js'; import { ModifierInvocation } from './ModifierInvocation.js'; import { OverrideSpecifier } from './OverrideSpecifier.js'; import { TerminalNode } from './TerminalNode.js'; @@ -25,7 +25,7 @@ function createNonterminalVariant( return exhaustiveCheck; } -export class FunctionAttribute extends PolymorphicNode { +export class FunctionAttribute extends SlangNode { readonly kind = NonterminalKind.FunctionAttribute; variant: ModifierInvocation | OverrideSpecifier | TerminalNode; diff --git a/src/slang-nodes/FunctionAttributes.ts b/src/slang-nodes/FunctionAttributes.ts index 6fc9f4cbf..61eb54bdb 100644 --- a/src/slang-nodes/FunctionAttributes.ts +++ b/src/slang-nodes/FunctionAttributes.ts @@ -1,7 +1,7 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { doc } from 'prettier'; import { sortFunctionAttributes } from '../slang-utils/sort-function-attributes.js'; -import { printVariant } from '../slang-printers/print-variant.js'; +import { extractVariant } from '../slang-utils/extract-variant.js'; import { SlangNode } from './SlangNode.js'; import { FunctionAttribute } from './FunctionAttribute.js'; @@ -15,17 +15,19 @@ const { line } = doc.builders; export class FunctionAttributes extends SlangNode { readonly kind = NonterminalKind.FunctionAttributes; - items: FunctionAttribute[]; + items: FunctionAttribute['variant'][]; constructor(ast: ast.FunctionAttributes, options: ParserOptions) { super(ast, true); - this.items = ast.items.map((item) => new FunctionAttribute(item, options)); + this.items = ast.items.map((item) => + extractVariant(new FunctionAttribute(item, options)) + ); this.items.sort(sortFunctionAttributes); } print(path: AstPath, print: PrintFunction): Doc { - return path.map(printVariant(print), 'items').map((item) => [line, item]); + return path.map((item) => [line, print(item)], 'items'); } } diff --git a/src/slang-nodes/FunctionDefinition.ts b/src/slang-nodes/FunctionDefinition.ts index 9ee08425f..32df3faf1 100644 --- a/src/slang-nodes/FunctionDefinition.ts +++ b/src/slang-nodes/FunctionDefinition.ts @@ -54,7 +54,7 @@ export class FunctionDefinition extends SlangNode { } cleanModifierInvocationArguments(): void { - for (const { variant: attribute } of this.attributes.items) { + for (const attribute of this.attributes.items) { if ( typeof attribute !== 'string' && attribute.kind === NonterminalKind.ModifierInvocation diff --git a/src/slang-nodes/FunctionTypeAttribute.ts b/src/slang-nodes/FunctionTypeAttribute.ts index a13cf97cf..5e0b2d18d 100644 --- a/src/slang-nodes/FunctionTypeAttribute.ts +++ b/src/slang-nodes/FunctionTypeAttribute.ts @@ -1,10 +1,10 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; -import { PolymorphicNode } from './PolymorphicNode.js'; +import { SlangNode } from './SlangNode.js'; import { TerminalNode } from './TerminalNode.js'; import type * as ast from '@nomicfoundation/slang/ast'; -export class FunctionTypeAttribute extends PolymorphicNode { +export class FunctionTypeAttribute extends SlangNode { readonly kind = NonterminalKind.FunctionTypeAttribute; variant: TerminalNode; diff --git a/src/slang-nodes/FunctionTypeAttributes.ts b/src/slang-nodes/FunctionTypeAttributes.ts index 2d80719c6..aa31d9ac4 100644 --- a/src/slang-nodes/FunctionTypeAttributes.ts +++ b/src/slang-nodes/FunctionTypeAttributes.ts @@ -1,7 +1,7 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { doc } from 'prettier'; import { sortFunctionAttributes } from '../slang-utils/sort-function-attributes.js'; -import { printVariant } from '../slang-printers/print-variant.js'; +import { extractVariant } from '../slang-utils/extract-variant.js'; import { SlangNode } from './SlangNode.js'; import { FunctionTypeAttribute } from './FunctionTypeAttribute.js'; @@ -14,17 +14,19 @@ const { line } = doc.builders; export class FunctionTypeAttributes extends SlangNode { readonly kind = NonterminalKind.FunctionTypeAttributes; - items: FunctionTypeAttribute[]; + items: FunctionTypeAttribute['variant'][]; constructor(ast: ast.FunctionTypeAttributes) { super(ast, true); - this.items = ast.items.map((item) => new FunctionTypeAttribute(item)); + this.items = ast.items.map((item) => + extractVariant(new FunctionTypeAttribute(item)) + ); this.items.sort(sortFunctionAttributes); } print(path: AstPath, print: PrintFunction): Doc { - return path.map(printVariant(print), 'items').map((item) => [line, item]); + return path.map((item) => [line, print(item)], 'items'); } } diff --git a/src/slang-nodes/ModifierAttribute.ts b/src/slang-nodes/ModifierAttribute.ts index 9f2dbfa72..bc4310c34 100644 --- a/src/slang-nodes/ModifierAttribute.ts +++ b/src/slang-nodes/ModifierAttribute.ts @@ -2,13 +2,13 @@ import { NonterminalKind, TerminalNode as SlangTerminalNode } from '@nomicfoundation/slang/cst'; -import { PolymorphicNode } from './PolymorphicNode.js'; +import { SlangNode } from './SlangNode.js'; import { OverrideSpecifier } from './OverrideSpecifier.js'; import { TerminalNode } from './TerminalNode.js'; import type * as ast from '@nomicfoundation/slang/ast'; -export class ModifierAttribute extends PolymorphicNode { +export class ModifierAttribute extends SlangNode { readonly kind = NonterminalKind.ModifierAttribute; variant: OverrideSpecifier | TerminalNode; diff --git a/src/slang-nodes/ModifierAttributes.ts b/src/slang-nodes/ModifierAttributes.ts index 030d5f45b..aa8f565c2 100644 --- a/src/slang-nodes/ModifierAttributes.ts +++ b/src/slang-nodes/ModifierAttributes.ts @@ -1,7 +1,7 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { doc } from 'prettier'; import { sortFunctionAttributes } from '../slang-utils/sort-function-attributes.js'; -import { printVariant } from '../slang-printers/print-variant.js'; +import { extractVariant } from '../slang-utils/extract-variant.js'; import { SlangNode } from './SlangNode.js'; import { ModifierAttribute } from './ModifierAttribute.js'; @@ -14,17 +14,19 @@ const { line } = doc.builders; export class ModifierAttributes extends SlangNode { readonly kind = NonterminalKind.ModifierAttributes; - items: ModifierAttribute[]; + items: ModifierAttribute['variant'][]; constructor(ast: ast.ModifierAttributes) { super(ast, true); - this.items = ast.items.map((item) => new ModifierAttribute(item)); + this.items = ast.items.map((item) => + extractVariant(new ModifierAttribute(item)) + ); this.items.sort(sortFunctionAttributes); } print(path: AstPath, print: PrintFunction): Doc { - return path.map(printVariant(print), 'items').map((item) => [line, item]); + return path.map((item) => [line, print(item)], 'items'); } } diff --git a/src/slang-nodes/ReceiveFunctionAttribute.ts b/src/slang-nodes/ReceiveFunctionAttribute.ts index 74a52cff1..9745d34fb 100644 --- a/src/slang-nodes/ReceiveFunctionAttribute.ts +++ b/src/slang-nodes/ReceiveFunctionAttribute.ts @@ -3,7 +3,7 @@ import { NonterminalKind, TerminalNode as SlangTerminalNode } from '@nomicfoundation/slang/cst'; -import { PolymorphicNode } from './PolymorphicNode.js'; +import { SlangNode } from './SlangNode.js'; import { ModifierInvocation } from './ModifierInvocation.js'; import { OverrideSpecifier } from './OverrideSpecifier.js'; import { TerminalNode } from './TerminalNode.js'; @@ -25,7 +25,7 @@ function createNonterminalVariant( return exhaustiveCheck; } -export class ReceiveFunctionAttribute extends PolymorphicNode { +export class ReceiveFunctionAttribute extends SlangNode { readonly kind = NonterminalKind.ReceiveFunctionAttribute; variant: ModifierInvocation | OverrideSpecifier | TerminalNode; diff --git a/src/slang-nodes/ReceiveFunctionAttributes.ts b/src/slang-nodes/ReceiveFunctionAttributes.ts index bdbd2d0ce..75c22e3e1 100644 --- a/src/slang-nodes/ReceiveFunctionAttributes.ts +++ b/src/slang-nodes/ReceiveFunctionAttributes.ts @@ -1,7 +1,7 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { doc } from 'prettier'; import { sortFunctionAttributes } from '../slang-utils/sort-function-attributes.js'; -import { printVariant } from '../slang-printers/print-variant.js'; +import { extractVariant } from '../slang-utils/extract-variant.js'; import { SlangNode } from './SlangNode.js'; import { ReceiveFunctionAttribute } from './ReceiveFunctionAttribute.js'; @@ -15,7 +15,7 @@ const { line } = doc.builders; export class ReceiveFunctionAttributes extends SlangNode { readonly kind = NonterminalKind.ReceiveFunctionAttributes; - items: ReceiveFunctionAttribute[]; + items: ReceiveFunctionAttribute['variant'][]; constructor( ast: ast.ReceiveFunctionAttributes, @@ -23,14 +23,14 @@ export class ReceiveFunctionAttributes extends SlangNode { ) { super(ast, true); - this.items = ast.items.map( - (item) => new ReceiveFunctionAttribute(item, options) + this.items = ast.items.map((item) => + extractVariant(new ReceiveFunctionAttribute(item, options)) ); this.items.sort(sortFunctionAttributes); } print(path: AstPath, print: PrintFunction): Doc { - return path.map(printVariant(print), 'items').map((item) => [line, item]); + return path.map((item) => [line, print(item)], 'items'); } } diff --git a/src/slang-nodes/ReceiveFunctionDefinition.ts b/src/slang-nodes/ReceiveFunctionDefinition.ts index c2def4564..bd21f0240 100644 --- a/src/slang-nodes/ReceiveFunctionDefinition.ts +++ b/src/slang-nodes/ReceiveFunctionDefinition.ts @@ -35,7 +35,7 @@ export class ReceiveFunctionDefinition extends SlangNode { } cleanModifierInvocationArguments(): void { - for (const { variant: attribute } of this.attributes.items) { + for (const attribute of this.attributes.items) { if ( typeof attribute !== 'string' && attribute.kind === NonterminalKind.ModifierInvocation diff --git a/src/slang-nodes/StateVariableAttribute.ts b/src/slang-nodes/StateVariableAttribute.ts index 6ddf3295c..4cfa43602 100644 --- a/src/slang-nodes/StateVariableAttribute.ts +++ b/src/slang-nodes/StateVariableAttribute.ts @@ -2,13 +2,13 @@ import { NonterminalKind, TerminalNode as SlangTerminalNode } from '@nomicfoundation/slang/cst'; -import { PolymorphicNode } from './PolymorphicNode.js'; +import { SlangNode } from './SlangNode.js'; import { OverrideSpecifier } from './OverrideSpecifier.js'; import { TerminalNode } from './TerminalNode.js'; import type * as ast from '@nomicfoundation/slang/ast'; -export class StateVariableAttribute extends PolymorphicNode { +export class StateVariableAttribute extends SlangNode { readonly kind = NonterminalKind.StateVariableAttribute; variant: OverrideSpecifier | TerminalNode; diff --git a/src/slang-nodes/StateVariableAttributes.ts b/src/slang-nodes/StateVariableAttributes.ts index 8bf5bd4f8..30b596c72 100644 --- a/src/slang-nodes/StateVariableAttributes.ts +++ b/src/slang-nodes/StateVariableAttributes.ts @@ -1,7 +1,7 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { doc } from 'prettier'; import { sortFunctionAttributes } from '../slang-utils/sort-function-attributes.js'; -import { printVariant } from '../slang-printers/print-variant.js'; +import { extractVariant } from '../slang-utils/extract-variant.js'; import { SlangNode } from './SlangNode.js'; import { StateVariableAttribute } from './StateVariableAttribute.js'; @@ -14,19 +14,19 @@ const { line } = doc.builders; export class StateVariableAttributes extends SlangNode { readonly kind = NonterminalKind.StateVariableAttributes; - items: StateVariableAttribute[]; + items: StateVariableAttribute['variant'][]; constructor(ast: ast.StateVariableAttributes) { super(ast, true); - this.items = ast.items.map((item) => new StateVariableAttribute(item)); + this.items = ast.items.map((item) => + extractVariant(new StateVariableAttribute(item)) + ); this.items.sort(sortFunctionAttributes); } print(path: AstPath, print: PrintFunction): Doc { - return this.items.length - ? path.map(printVariant(print), 'items').map((item) => [line, item]) - : ''; + return path.map((item) => [line, print(item)], 'items'); } } diff --git a/src/slang-nodes/UnnamedFunctionAttribute.ts b/src/slang-nodes/UnnamedFunctionAttribute.ts index c67898e2c..caaf4e447 100644 --- a/src/slang-nodes/UnnamedFunctionAttribute.ts +++ b/src/slang-nodes/UnnamedFunctionAttribute.ts @@ -2,7 +2,7 @@ import { NonterminalKind, TerminalNode as SlangTerminalNode } from '@nomicfoundation/slang/cst'; -import { PolymorphicNode } from './PolymorphicNode.js'; +import { SlangNode } from './SlangNode.js'; import { ModifierInvocation } from './ModifierInvocation.js'; import { TerminalNode } from './TerminalNode.js'; @@ -10,7 +10,7 @@ import type * as ast from '@nomicfoundation/slang/ast'; import type { ParserOptions } from 'prettier'; import type { AstNode } from './types.d.ts'; -export class UnnamedFunctionAttribute extends PolymorphicNode { +export class UnnamedFunctionAttribute extends SlangNode { readonly kind = NonterminalKind.UnnamedFunctionAttribute; variant: ModifierInvocation | TerminalNode; diff --git a/src/slang-nodes/UnnamedFunctionAttributes.ts b/src/slang-nodes/UnnamedFunctionAttributes.ts index 5185d81f5..52ceb3ff0 100644 --- a/src/slang-nodes/UnnamedFunctionAttributes.ts +++ b/src/slang-nodes/UnnamedFunctionAttributes.ts @@ -1,7 +1,7 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst'; import { doc } from 'prettier'; import { sortFunctionAttributes } from '../slang-utils/sort-function-attributes.js'; -import { printVariant } from '../slang-printers/print-variant.js'; +import { extractVariant } from '../slang-utils/extract-variant.js'; import { SlangNode } from './SlangNode.js'; import { UnnamedFunctionAttribute } from './UnnamedFunctionAttribute.js'; @@ -15,7 +15,7 @@ const { line } = doc.builders; export class UnnamedFunctionAttributes extends SlangNode { readonly kind = NonterminalKind.UnnamedFunctionAttributes; - items: UnnamedFunctionAttribute[]; + items: UnnamedFunctionAttribute['variant'][]; constructor( ast: ast.UnnamedFunctionAttributes, @@ -23,14 +23,14 @@ export class UnnamedFunctionAttributes extends SlangNode { ) { super(ast, true); - this.items = ast.items.map( - (item) => new UnnamedFunctionAttribute(item, options) + this.items = ast.items.map((item) => + extractVariant(new UnnamedFunctionAttribute(item, options)) ); this.items.sort(sortFunctionAttributes); } print(path: AstPath, print: PrintFunction): Doc { - return path.map(printVariant(print), 'items').map((item) => [line, item]); + return path.map((item) => [line, print(item)], 'items'); } } diff --git a/src/slang-nodes/UnnamedFunctionDefinition.ts b/src/slang-nodes/UnnamedFunctionDefinition.ts index ef593fd5d..f22514401 100644 --- a/src/slang-nodes/UnnamedFunctionDefinition.ts +++ b/src/slang-nodes/UnnamedFunctionDefinition.ts @@ -35,7 +35,7 @@ export class UnnamedFunctionDefinition extends SlangNode { } cleanModifierInvocationArguments(): void { - for (const { variant: attribute } of this.attributes.items) { + for (const attribute of this.attributes.items) { if (attribute.kind === NonterminalKind.ModifierInvocation) { attribute.cleanModifierInvocationArguments(); } diff --git a/src/slang-utils/sort-function-attributes.ts b/src/slang-utils/sort-function-attributes.ts index 337a706ce..0547c684d 100644 --- a/src/slang-utils/sort-function-attributes.ts +++ b/src/slang-utils/sort-function-attributes.ts @@ -13,8 +13,8 @@ const visibilityKeyWords = new Set([ const mutabilityKeyWords = new Set(['pure', 'constant', 'payable', 'view']); export function sortFunctionAttributes( - { variant: aVariant }: SortableAttribute, - { variant: bVariant }: SortableAttribute + aVariant: SortableAttribute, + bVariant: SortableAttribute ): number { const aIsString = aVariant instanceof TerminalNode; const bIsString = bVariant instanceof TerminalNode; diff --git a/src/slang-utils/types.d.ts b/src/slang-utils/types.d.ts index 3e95c0c43..96d5743af 100644 --- a/src/slang-utils/types.d.ts +++ b/src/slang-utils/types.d.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/no-duplicate-type-constituents */ import type { ConstructorAttribute } from '../slang-nodes/ConstructorAttribute.ts'; import type { FallbackFunctionAttribute } from '../slang-nodes/FallbackFunctionAttribute.ts'; import type { FunctionAttribute } from '../slang-nodes/FunctionAttribute.ts'; @@ -8,11 +9,11 @@ import type { StateVariableAttribute } from '../slang-nodes/StateVariableAttribu import type { UnnamedFunctionAttribute } from '../slang-nodes/UnnamedFunctionAttribute.ts'; type SortableAttribute = - | ConstructorAttribute - | FallbackFunctionAttribute - | FunctionAttribute - | FunctionTypeAttribute - | ModifierAttribute - | ReceiveFunctionAttribute - | StateVariableAttribute - | UnnamedFunctionAttribute; + | ConstructorAttribute['variant'] + | FallbackFunctionAttribute['variant'] + | FunctionAttribute['variant'] + | FunctionTypeAttribute['variant'] + | ModifierAttribute['variant'] + | ReceiveFunctionAttribute['variant'] + | StateVariableAttribute['variant'] + | UnnamedFunctionAttribute['variant']; diff --git a/src/slangPrinter.ts b/src/slangPrinter.ts index 7b0ad1a55..f0815e8dc 100644 --- a/src/slangPrinter.ts +++ b/src/slangPrinter.ts @@ -5,6 +5,14 @@ import type { AstPath, Doc, ParserOptions } from 'prettier'; import type { AstNode, StrictAstNode } from './slang-nodes/types.d.ts'; import type { PrintFunction } from './types.d.ts'; import type { ArgumentsDeclaration } from './slang-nodes/ArgumentsDeclaration.js'; +import type { ConstructorAttribute } from './slang-nodes/ConstructorAttribute.js'; +import type { FallbackFunctionAttribute } from './slang-nodes/FallbackFunctionAttribute.js'; +import type { FunctionAttribute } from './slang-nodes/FunctionAttribute.js'; +import type { FunctionTypeAttribute } from './slang-nodes/FunctionTypeAttribute.js'; +import type { ModifierAttribute } from './slang-nodes/ModifierAttribute.js'; +import type { ReceiveFunctionAttribute } from './slang-nodes/ReceiveFunctionAttribute.js'; +import type { StateVariableAttribute } from './slang-nodes/StateVariableAttribute.js'; +import type { UnnamedFunctionAttribute } from './slang-nodes/UnnamedFunctionAttribute.js'; function hasNodeIgnoreComment({ comments }: StrictAstNode): boolean { // Prettier sets SourceUnit's comments to undefined after assigning comments @@ -54,7 +62,20 @@ function ignoreComments(path: AstPath): void { // Nodes take care of undefined and string properties so we can restrict path // to AstPath function genericPrint( - path: AstPath>, + path: AstPath< + Exclude< + StrictAstNode, + | ArgumentsDeclaration + | ConstructorAttribute + | FallbackFunctionAttribute + | FunctionAttribute + | FunctionTypeAttribute + | ModifierAttribute + | ReceiveFunctionAttribute + | StateVariableAttribute + | UnnamedFunctionAttribute + > + >, options: ParserOptions, print: PrintFunction ): Doc { diff --git a/tests/format/Comments/__snapshots__/format.test.js.snap b/tests/format/Comments/__snapshots__/format.test.js.snap index 17ed43a80..a2b2474b0 100644 --- a/tests/format/Comments/__snapshots__/format.test.js.snap +++ b/tests/format/Comments/__snapshots__/format.test.js.snap @@ -379,7 +379,8 @@ contract Comments13 { modifier1 // comment 2 // comment 3 // comment 4 // comment 5 - modifier2(/* comment 7 */) // comment 6 // comment 8 + modifier2(/* comment 7 */) // comment 6 + // comment 8 modifier3( // comment 9 // comment 10