|
1 | 1 | import { AbstractFormatter, AstNode, CstNode, findCommentNode, Formatting, isAstNode } from 'langium';
|
2 | 2 | import * as ast from '../generated/ast';
|
3 | 3 | import { SdsImport, SdsImportAlias, SdsModule } from '../generated/ast';
|
4 |
| -import { annotationCallsOrEmpty, typeArgumentsOrEmpty } from '../helpers/astShortcuts'; |
| 4 | +import { annotationCallsOrEmpty, literalsOrEmpty, typeArgumentsOrEmpty } from '../helpers/astShortcuts'; |
5 | 5 | import { FormattingAction, FormattingActionOptions } from 'langium/src/lsp/formatter';
|
6 | 6 | import noSpace = Formatting.noSpace;
|
7 | 7 | import newLine = Formatting.newLine;
|
@@ -149,6 +149,10 @@ export class SafeDSFormatter extends AbstractFormatter {
|
149 | 149 | this.formatSdsMemberType(node);
|
150 | 150 | } else if (ast.isSdsCallableType(node)) {
|
151 | 151 | this.formatSdsCallableType(node);
|
| 152 | + } else if (ast.isSdsLiteralType(node)) { |
| 153 | + this.formatSdsLiteralType(node); |
| 154 | + } else if (ast.isSdsLiteralList(node)) { |
| 155 | + this.formatSdsLiteralList(node); |
152 | 156 | } else if (ast.isSdsNamedType(node)) {
|
153 | 157 | this.formatSdsNamedType(node);
|
154 | 158 | } else if (ast.isSdsUnionType(node)) {
|
@@ -761,6 +765,25 @@ export class SafeDSFormatter extends AbstractFormatter {
|
761 | 765 | formatter.keyword('->').surround(oneSpace());
|
762 | 766 | }
|
763 | 767 |
|
| 768 | + private formatSdsLiteralType(node: ast.SdsLiteralType): void { |
| 769 | + const formatter = this.getNodeFormatter(node); |
| 770 | + |
| 771 | + formatter.keyword('literal').append(noSpace()); |
| 772 | + } |
| 773 | + |
| 774 | + private formatSdsLiteralList(node: ast.SdsLiteralList): void { |
| 775 | + const formatter = this.getNodeFormatter(node); |
| 776 | + const literals = node.literals ?? []; |
| 777 | + |
| 778 | + if (literals.length > 0) { |
| 779 | + formatter.node(literals[0]).prepend(noSpace()); |
| 780 | + formatter.nodes(...literals.slice(1)).prepend(oneSpace()); |
| 781 | + } |
| 782 | + |
| 783 | + formatter.keywords(',').prepend(noSpace()); |
| 784 | + formatter.keyword('>').prepend(noSpace()); |
| 785 | + } |
| 786 | + |
764 | 787 | private formatSdsNamedType(node: ast.SdsNamedType) {
|
765 | 788 | const formatter = this.getNodeFormatter(node);
|
766 | 789 |
|
@@ -847,10 +870,12 @@ export class SafeDSFormatter extends AbstractFormatter {
|
847 | 870 |
|
848 | 871 | if (ast.isSdsCallableType(node) || ast.isSdsMemberType(node)) {
|
849 | 872 | return true;
|
850 |
| - } else if (ast.isSdsUnionType(node)) { |
851 |
| - return typeArgumentsOrEmpty(node.typeArgumentList).length > 0; |
| 873 | + } else if (ast.isSdsLiteralType(node)) { |
| 874 | + return literalsOrEmpty(node).length > 0; |
852 | 875 | } else if (ast.isSdsNamedType(node)) {
|
853 | 876 | return typeArgumentsOrEmpty(node.typeArgumentList).length > 0;
|
| 877 | + } else if (ast.isSdsUnionType(node)) { |
| 878 | + return typeArgumentsOrEmpty(node.typeArgumentList).length > 0; |
854 | 879 | } else {
|
855 | 880 | return false;
|
856 | 881 | }
|
|
0 commit comments