Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 2 additions & 11 deletions src/slang-nodes/ContractMembers.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
import { NonterminalKind } from '@nomicfoundation/slang/cst';
import { doc } from 'prettier';
import { printSeparatedItem } from '../slang-printers/print-separated-item.js';
import { printPreservingEmptyLines } from '../slang-printers/print-preserving-empty-lines.js';
import { printIndentedPreservingEmptyLines } from '../slang-printers/print-preserving-empty-lines.js';
import { extractVariant } from '../slang-utils/extract-variant.js';
import { SlangNode } from './SlangNode.js';
import { ContractMember } from './ContractMember.js';
Expand All @@ -11,8 +9,6 @@ import type { AstPath, Doc, ParserOptions } from 'prettier';
import type { CollectedMetadata, PrintFunction } from '../types.d.ts';
import type { PrintableNode } from './types.d.ts';

const { hardline } = doc.builders;

export class ContractMembers extends SlangNode {
readonly kind = NonterminalKind.ContractMembers;

Expand All @@ -35,11 +31,6 @@ export class ContractMembers extends SlangNode {
path: AstPath<ContractMembers>,
options: ParserOptions<PrintableNode>
): Doc {
return this.items.length > 0 || (this.comments?.length || 0) > 0
? printSeparatedItem(
printPreservingEmptyLines(this, path, print, options),
{ firstSeparator: hardline }
)
: '';
return printIndentedPreservingEmptyLines(this, path, print, options);
}
}
13 changes: 2 additions & 11 deletions src/slang-nodes/InterfaceMembers.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
import { NonterminalKind } from '@nomicfoundation/slang/cst';
import { doc } from 'prettier';
import { printSeparatedItem } from '../slang-printers/print-separated-item.js';
import { printPreservingEmptyLines } from '../slang-printers/print-preserving-empty-lines.js';
import { printIndentedPreservingEmptyLines } from '../slang-printers/print-preserving-empty-lines.js';
import { extractVariant } from '../slang-utils/extract-variant.js';
import { SlangNode } from './SlangNode.js';
import { ContractMember } from './ContractMember.js';
Expand All @@ -11,8 +9,6 @@ import type { AstPath, Doc, ParserOptions } from 'prettier';
import type { CollectedMetadata, PrintFunction } from '../types.d.ts';
import type { PrintableNode } from './types.d.ts';

const { hardline } = doc.builders;

export class InterfaceMembers extends SlangNode {
readonly kind = NonterminalKind.InterfaceMembers;

Expand All @@ -35,11 +31,6 @@ export class InterfaceMembers extends SlangNode {
path: AstPath<InterfaceMembers>,
options: ParserOptions<PrintableNode>
): Doc {
return this.items.length > 0 || (this.comments?.length || 0) > 0
? printSeparatedItem(
printPreservingEmptyLines(this, path, print, options),
{ firstSeparator: hardline }
)
: '';
return printIndentedPreservingEmptyLines(this, path, print, options);
}
}
13 changes: 2 additions & 11 deletions src/slang-nodes/LibraryMembers.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
import { NonterminalKind } from '@nomicfoundation/slang/cst';
import { doc } from 'prettier';
import { printSeparatedItem } from '../slang-printers/print-separated-item.js';
import { printPreservingEmptyLines } from '../slang-printers/print-preserving-empty-lines.js';
import { printIndentedPreservingEmptyLines } from '../slang-printers/print-preserving-empty-lines.js';
import { extractVariant } from '../slang-utils/extract-variant.js';
import { SlangNode } from './SlangNode.js';
import { ContractMember } from './ContractMember.js';
Expand All @@ -11,8 +9,6 @@ import type { AstPath, Doc, ParserOptions } from 'prettier';
import type { CollectedMetadata, PrintFunction } from '../types.d.ts';
import type { PrintableNode } from './types.d.ts';

const { hardline } = doc.builders;

export class LibraryMembers extends SlangNode {
readonly kind = NonterminalKind.LibraryMembers;

Expand All @@ -35,11 +31,6 @@ export class LibraryMembers extends SlangNode {
path: AstPath<LibraryMembers>,
options: ParserOptions<PrintableNode>
): Doc {
return this.items.length > 0 || (this.comments?.length || 0) > 0
? printSeparatedItem(
printPreservingEmptyLines(this, path, print, options),
{ firstSeparator: hardline }
)
: '';
return printIndentedPreservingEmptyLines(this, path, print, options);
}
}
13 changes: 2 additions & 11 deletions src/slang-nodes/Statements.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
import { NonterminalKind } from '@nomicfoundation/slang/cst';
import { doc } from 'prettier';
import { printSeparatedItem } from '../slang-printers/print-separated-item.js';
import { printPreservingEmptyLines } from '../slang-printers/print-preserving-empty-lines.js';
import { printIndentedPreservingEmptyLines } from '../slang-printers/print-preserving-empty-lines.js';
import { extractVariant } from '../slang-utils/extract-variant.js';
import { SlangNode } from './SlangNode.js';
import { Statement } from './Statement.js';
Expand All @@ -11,8 +9,6 @@ import type { AstPath, Doc, ParserOptions } from 'prettier';
import type { CollectedMetadata, PrintFunction } from '../types.d.ts';
import type { PrintableNode } from './types.d.ts';

const { hardline } = doc.builders;

export class Statements extends SlangNode {
readonly kind = NonterminalKind.Statements;

Expand All @@ -35,11 +31,6 @@ export class Statements extends SlangNode {
path: AstPath<Statements>,
options: ParserOptions<PrintableNode>
): Doc {
return this.items.length > 0 || (this.comments?.length || 0) > 0
? printSeparatedItem(
printPreservingEmptyLines(this, path, print, options),
{ firstSeparator: hardline }
)
: '';
return printIndentedPreservingEmptyLines(this, path, print, options);
}
}
13 changes: 2 additions & 11 deletions src/slang-nodes/YulStatements.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
import { NonterminalKind } from '@nomicfoundation/slang/cst';
import { doc } from 'prettier';
import { printSeparatedItem } from '../slang-printers/print-separated-item.js';
import { printPreservingEmptyLines } from '../slang-printers/print-preserving-empty-lines.js';
import { printIndentedPreservingEmptyLines } from '../slang-printers/print-preserving-empty-lines.js';
import { extractVariant } from '../slang-utils/extract-variant.js';
import { SlangNode } from './SlangNode.js';
import { YulStatement } from './YulStatement.js';
Expand All @@ -11,8 +9,6 @@ import type { AstPath, Doc, ParserOptions } from 'prettier';
import type { CollectedMetadata, PrintFunction } from '../types.d.ts';
import type { PrintableNode } from './types.d.ts';

const { hardline } = doc.builders;

export class YulStatements extends SlangNode {
readonly kind = NonterminalKind.YulStatements;

Expand All @@ -35,11 +31,6 @@ export class YulStatements extends SlangNode {
path: AstPath<YulStatements>,
options: ParserOptions<PrintableNode>
): Doc {
return this.items.length > 0 || (this.comments?.length || 0) > 0
? printSeparatedItem(
printPreservingEmptyLines(this, path, print, options),
{ firstSeparator: hardline }
)
: '';
return printIndentedPreservingEmptyLines(this, path, print, options);
}
}
2 changes: 1 addition & 1 deletion src/slang-printers/print-comments.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ export function printComments(
path: AstPath<PrintableNode>,
options: ParserOptions<PrintableNode>
): Doc[] {
const lastPrintableIndex = (node.comments ?? []).findLastIndex(isPrintable);
const lastPrintableIndex = node.comments?.findLastIndex(isPrintable) ?? -1;
if (lastPrintableIndex === -1) {
return [];
}
Expand Down
15 changes: 15 additions & 0 deletions src/slang-printers/print-preserving-empty-lines.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst';
import { doc, util } from 'prettier';
import { locEnd } from '../slang-utils/loc.js';
import { printComments } from './print-comments.js';
import { printSeparatedItem } from './print-separated-item.js';

import type { AstPath, Doc, ParserOptions } from 'prettier';
import type { LineCollection, PrintableNode } from '../slang-nodes/types.d.ts';
Expand Down Expand Up @@ -36,3 +37,17 @@ export function printPreservingEmptyLines(
}, 'items')
: printComments(node, path, options);
}

export function printIndentedPreservingEmptyLines(
node: LineCollection,
path: AstPath<LineCollection>,
print: PrintFunction,
options: ParserOptions<PrintableNode>
): Doc {
return node.items.length > 0 || (node.comments?.length ?? 0) > 0
? printSeparatedItem(
printPreservingEmptyLines(node, path, print, options),
{ firstSeparator: hardline }
)
: '';
}