Skip to content

Commit 2165721

Browse files
author
Christoph Bühler
committed
adding accessorgenerator
1 parent f17b244 commit 2165721

File tree

3 files changed

+38
-4
lines changed

3 files changed

+38
-4
lines changed

src/code-generators/TypescriptCodeGenerator.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { GetterDeclaration, SetterDeclaration } from '../declarations/AccessorDeclaration';
12
import { Declaration } from '../declarations/Declaration';
23
import { MethodDeclaration } from '../declarations/MethodDeclaration';
34
import { ParameterDeclaration } from '../declarations/ParameterDeclaration';
@@ -11,6 +12,7 @@ import { NamedImport } from '../imports/NamedImport';
1112
import { NamespaceImport } from '../imports/NamespaceImport';
1213
import { StringImport } from '../imports/StringImport';
1314
import { SymbolSpecifier } from '../SymbolSpecifier';
15+
import { generateAccessorDeclaration } from './typescript-generators/accessorDeclaration';
1416
import { generateExternalModuleImport } from './typescript-generators/externalModuleImport';
1517
import { generateMethodDeclaration } from './typescript-generators/methodDeclaration';
1618
import { generateNamedImport } from './typescript-generators/namedImport';
@@ -46,6 +48,8 @@ export const GENERATORS: Generators = {
4648
[NamedImport.name]: generateNamedImport,
4749
[NamespaceImport.name]: generateNamespaceImport,
4850
[StringImport.name]: generateStringImport,
51+
[SetterDeclaration.name]: generateAccessorDeclaration,
52+
[GetterDeclaration.name]: generateAccessorDeclaration,
4953
};
5054

5155
/**
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import { AccessorDeclaration, SetterDeclaration } from '../../declarations/AccessorDeclaration';
2+
import { getVisibilityText } from '../../declarations/DeclarationVisibility';
3+
import { TypescriptGenerationOptions } from '../TypescriptGenerationOptions';
4+
5+
/**
6+
* Generates typescript code for a class property accessor.
7+
*
8+
* @export
9+
* @param {AccessorDeclaration} accessor
10+
* @param {TypescriptGenerationOptions} { tabSize }
11+
* @returns {string}
12+
*/
13+
export function generateAccessorDeclaration(
14+
accessor: AccessorDeclaration,
15+
{ tabSize }: TypescriptGenerationOptions,
16+
): string {
17+
const tabs = Array(tabSize + 1).join(' ');
18+
let definitionLine: string;
19+
if (accessor instanceof SetterDeclaration) {
20+
definitionLine = `${tabs}${accessor.visibility !== undefined ? getVisibilityText(accessor.visibility) + ' ' : ''}` +
21+
`set ${accessor.name}(value${accessor.type ? `: ${accessor.type}` : ''}) {`;
22+
} else {
23+
definitionLine = `${tabs}${accessor.visibility !== undefined ? getVisibilityText(accessor.visibility) + ' ' : ''}` +
24+
`get ${accessor.name}()${accessor.type ? `: ${accessor.type}` : ''} {`;
25+
}
26+
27+
return `${definitionLine}
28+
${tabs}${tabs}throw new Error('Not implemented yet.');
29+
${tabs}}\n`;
30+
}

src/code-generators/typescript-generators/methodDeclaration.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@ import { generateParameterDeclaration } from './parameterDeclaration';
55

66
/**
77
* Generates typescript code for a method declaration.
8-
*
8+
*
99
* @export
10-
* @param {MethodDeclaration} method
11-
* @param {TypescriptGenerationOptions} { tabSize }
12-
* @returns {string}
10+
* @param {MethodDeclaration} method
11+
* @param {TypescriptGenerationOptions} { tabSize }
12+
* @returns {string}
1313
*/
1414
export function generateMethodDeclaration(method: MethodDeclaration, { tabSize }: TypescriptGenerationOptions): string {
1515
const intend = Array(tabSize + 1).join(' ');

0 commit comments

Comments
 (0)