ether-code 0.1.6 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/cli/ether.js +1 -1
  2. package/generators/css-generator.js +42 -55
  3. package/generators/graphql-generator.js +19 -22
  4. package/generators/html-generator.js +51 -220
  5. package/generators/js-generator.js +76 -157
  6. package/generators/node-generator.js +49 -93
  7. package/generators/php-generator.js +46 -68
  8. package/generators/python-generator.js +35 -54
  9. package/generators/react-generator.js +37 -47
  10. package/generators/ruby-generator.js +59 -119
  11. package/generators/sql-generator.js +42 -63
  12. package/generators/ts-generator.js +59 -133
  13. package/i18n/i18n-css.json +147 -147
  14. package/i18n/i18n-graphql.json +6 -6
  15. package/i18n/i18n-html.json +135 -135
  16. package/i18n/i18n-js.json +107 -107
  17. package/i18n/i18n-node.json +14 -14
  18. package/i18n/i18n-php.json +177 -177
  19. package/i18n/i18n-python.json +16 -16
  20. package/i18n/i18n-react.json +97 -97
  21. package/i18n/i18n-ruby.json +22 -22
  22. package/i18n/i18n-sql.json +153 -153
  23. package/i18n/i18n-ts.json +10 -10
  24. package/lexer/ether-lexer.js +175 -34
  25. package/lexer/tokens.js +6 -6
  26. package/package.json +1 -1
  27. package/parsers/ast-css.js +0 -545
  28. package/parsers/ast-graphql.js +0 -424
  29. package/parsers/ast-html.js +0 -886
  30. package/parsers/ast-js.js +0 -750
  31. package/parsers/ast-node.js +0 -2440
  32. package/parsers/ast-php.js +0 -957
  33. package/parsers/ast-react.js +0 -580
  34. package/parsers/ast-ruby.js +0 -895
  35. package/parsers/ast-ts.js +0 -1352
  36. package/parsers/css-parser.js +0 -1981
  37. package/parsers/graphql-parser.js +0 -2011
  38. package/parsers/html-parser.js +0 -1182
  39. package/parsers/js-parser.js +0 -2564
  40. package/parsers/node-parser.js +0 -2644
  41. package/parsers/php-parser.js +0 -3037
  42. package/parsers/react-parser.js +0 -1035
  43. package/parsers/ruby-parser.js +0 -2680
  44. package/parsers/ts-parser.js +0 -3881
@@ -19,12 +19,12 @@ class NodeGenerator extends JSGenerator {
19
19
  'nom dossier': '__dirname',
20
20
  'tampon': 'Buffer',
21
21
  'chemin': 'path',
22
- 'système fichiers': 'fs',
22
+ 'systeme fichiers': 'fs',
23
23
  'http': 'http',
24
24
  'https': 'https',
25
25
  'url': 'url',
26
- 'chaîne requête': 'querystring',
27
- 'événements': 'events',
26
+ 'chaine requete': 'querystring',
27
+ 'evenements': 'events',
28
28
  'flux': 'stream',
29
29
  'utilitaires': 'util',
30
30
  'os': 'os',
@@ -34,38 +34,33 @@ class NodeGenerator extends JSGenerator {
34
34
  'net': 'net',
35
35
  'dns': 'dns',
36
36
  'zlib': 'zlib',
37
- 'créer serveur': 'createServer',
38
- 'écouter': 'listen',
39
- 'requête': 'request',
40
- 'réponse': 'response',
41
- 'entêtes': 'headers',
42
- 'méthode': 'method',
43
- 'url requête': 'url',
44
- 'écrire tête': 'writeHead',
37
+ 'creer serveur': 'createServer',
38
+ 'ecouter': 'listen',
39
+ 'requete': 'request',
40
+ 'reponse': 'response',
41
+ 'entetes': 'headers',
42
+ 'methode': 'method',
43
+ 'url requete': 'url',
44
+ 'ecrire tete': 'writeHead',
45
45
  'terminer': 'end',
46
46
  'sur': 'on',
47
- 'émettre': 'emit',
47
+ 'emettre': 'emit',
48
48
  'une fois': 'once',
49
- 'retirer écouteur': 'removeListener',
49
+ 'retirer ecouteur': 'removeListener',
50
50
  'lire fichier': 'readFile',
51
51
  'lire fichier sync': 'readFileSync',
52
- 'écrire fichier': 'writeFile',
53
- 'écrire fichier sync': 'writeFileSync',
52
+ 'ecrire fichier': 'writeFile',
53
+ 'ecrire fichier sync': 'writeFileSync',
54
54
  'ajouter fichier': 'appendFile',
55
55
  'supprimer fichier': 'unlink',
56
56
  'renommer': 'rename',
57
57
  'existe': 'existsSync',
58
58
  'statistiques': 'stat',
59
- 'créer dossier': 'mkdir',
59
+ 'creer dossier': 'mkdir',
60
60
  'lire dossier': 'readdir',
61
61
  'supprimer dossier': 'rmdir',
62
62
  'joindre': 'join',
63
- 'joindre chemin': 'join',
64
- 'de': 'from',
65
- 'temporiser': 'setTimeout',
66
- 'intervalle': 'setInterval',
67
- 'promettifier': 'promisify',
68
- 'résoudre': 'resolve',
63
+ 'resoudre': 'resolve',
69
64
  'base': 'basename',
70
65
  'dossier': 'dirname',
71
66
  'extension': 'extname',
@@ -75,20 +70,20 @@ class NodeGenerator extends JSGenerator {
75
70
  'arguments': 'argv',
76
71
  'environnement': 'env',
77
72
  'sortie': 'exit',
78
- 'répertoire travail': 'cwd',
73
+ 'repertoire travail': 'cwd',
79
74
  'changer dossier': 'chdir',
80
- 'mémoire': 'memoryUsage',
75
+ 'memoire': 'memoryUsage',
81
76
  'temps fonctionnement': 'uptime',
82
77
  'prochain tick': 'nextTick',
83
78
  'plateforme': 'platform',
84
79
  'architecture': 'arch',
85
80
  'cpus': 'cpus',
86
- 'mémoire totale': 'totalmem',
87
- 'mémoire libre': 'freemem',
81
+ 'memoire totale': 'totalmem',
82
+ 'memoire libre': 'freemem',
88
83
  'dossier maison': 'homedir',
89
84
  'dossier temp': 'tmpdir',
90
85
  'nom hote': 'hostname',
91
- 'exécuter': 'exec',
86
+ 'executer': 'exec',
92
87
  'spawn': 'spawn',
93
88
  'fork': 'fork',
94
89
  'pid': 'pid',
@@ -97,7 +92,7 @@ class NodeGenerator extends JSGenerator {
97
92
  'socket': 'Socket',
98
93
  'serveur': 'Server',
99
94
  'chercher': 'lookup',
100
- 'résoudre dns': 'resolve',
95
+ 'resoudre dns': 'resolve',
101
96
  'compresser': 'gzip',
102
97
  'decompresser': 'gunzip',
103
98
  'degonfler': 'deflate',
@@ -105,12 +100,12 @@ class NodeGenerator extends JSGenerator {
105
100
  'hash': 'createHash',
106
101
  'hmac': 'createHmac',
107
102
  'chiffrer': 'createCipher',
108
- 'déchiffrer': 'createDecipher',
109
- 'aléatoire octets': 'randomBytes',
103
+ 'dechiffrer': 'createDecipher',
104
+ 'aleatoire octets': 'randomBytes',
110
105
  'promisifier': 'promisify',
111
106
  'inspecter': 'inspect',
112
- 'hériter': 'inherits',
113
- 'formater chaîne': 'format',
107
+ 'heriter': 'inherits',
108
+ 'formater chaine': 'format',
114
109
  'deboguer': 'debuglog',
115
110
  'express': 'express',
116
111
  'application': 'app',
@@ -124,7 +119,7 @@ class NodeGenerator extends JSGenerator {
124
119
  'middleware': 'middleware',
125
120
  'corps': 'body',
126
121
  'params': 'params',
127
- 'requête query': 'query',
122
+ 'requete query': 'query',
128
123
  'cookies': 'cookies',
129
124
  'session': 'session',
130
125
  'json': 'json',
@@ -142,7 +137,7 @@ class NodeGenerator extends JSGenerator {
142
137
  'trouver': 'find',
143
138
  'trouver un': 'findOne',
144
139
  'trouver par id': 'findById',
145
- 'créer': 'create',
140
+ 'creer': 'create',
146
141
  'mettre a jour un': 'updateOne',
147
142
  'supprimer un': 'deleteOne',
148
143
  'sauvegarder': 'save',
@@ -164,22 +159,13 @@ class NodeGenerator extends JSGenerator {
164
159
 
165
160
  if (Array.isArray(ast)) {
166
161
  for (const node of ast) {
167
- const result = this.generateNode(node)
168
- if (result !== undefined && result !== '' && this.output === '') {
169
- return result
170
- }
162
+ this.generateNode(node)
171
163
  }
172
164
  } else if (ast && ast.type) {
173
- const result = this.generateNode(ast)
174
- if (result !== undefined && result !== '' && this.output === '') {
175
- return result
176
- }
165
+ this.generateNode(ast)
177
166
  } else if (ast && ast.body) {
178
167
  for (const node of ast.body) {
179
- const result = this.generateNode(node)
180
- if (result !== undefined && result !== '' && this.output === '') {
181
- return result
182
- }
168
+ this.generateNode(node)
183
169
  }
184
170
  }
185
171
 
@@ -193,10 +179,7 @@ class NodeGenerator extends JSGenerator {
193
179
  case 'RequireStatement':
194
180
  return this.generateRequire(node)
195
181
  case 'ModuleExports':
196
- case 'ModuleExportsStatement':
197
182
  return this.generateModuleExports(node)
198
- case 'ExportsStatement':
199
- return this.generateExportsStatement(node)
200
183
  case 'ServerCreation':
201
184
  return this.generateServerCreation(node)
202
185
  case 'RouteHandler':
@@ -215,60 +198,33 @@ class NodeGenerator extends JSGenerator {
215
198
  }
216
199
 
217
200
  generateRequire(node) {
218
- const module = node.source || node.module
219
- const modulePath = typeof module === 'string' ? module : this.generateNode(module)
201
+ const module = typeof node.module === 'string' ? node.module : this.generateNode(node.module)
202
+ const variable = node.variable || node.name
220
203
 
221
- const id = node.id || node.variable || node.name
222
-
223
- if (id?.type === 'ObjectPattern') {
224
- const props = (id.properties || []).map(p => {
225
- const key = p.key?.name || p.key
226
- return this.translate(key)
227
- }).join(', ')
228
- this.writeLine(`const { ${props} } = require('${modulePath}');`)
229
- } else if (node.destructure && node.destructure.length > 0) {
204
+ if (node.destructure && node.destructure.length > 0) {
230
205
  const props = node.destructure.map(p => this.translate(p)).join(', ')
231
- this.writeLine(`const { ${props} } = require('${modulePath}');`)
232
- } else if (id) {
233
- const varName = typeof id === 'string' ? id : (id.name || this.generateNode(id))
234
- this.writeLine(`const ${this.translate(varName)} = require('${modulePath}');`)
206
+ this.writeLine(`const { ${props} } = require('${module}');`)
207
+ } else if (variable) {
208
+ this.writeLine(`const ${this.translate(variable)} = require('${module}');`)
235
209
  } else {
236
- this.writeLine(`require('${modulePath}');`)
210
+ this.writeLine(`require('${module}');`)
237
211
  }
238
212
  }
239
213
 
240
214
  generateModuleExports(node) {
241
- const exports = node.exports || node.default
242
-
243
- if (exports?.type === 'ObjectExpression') {
244
- const props = (exports.properties || []).map(p => {
245
- const key = p.key?.name || p.key
246
- if (p.shorthand) {
247
- return this.translate(key)
248
- }
249
- const value = this.generateNode(p.value)
250
- return `${this.translate(key)}: ${value}`
251
- })
252
- this.writeLine(`module.exports = { ${props.join(', ')} };`)
253
- } else if (exports) {
254
- const value = this.generateNode(exports)
255
- this.writeLine(`module.exports = ${value};`)
256
- } else if (node.named && Object.keys(node.named).length > 0) {
257
- const exportsList = Object.entries(node.named).map(([key, value]) => {
215
+ if (node.named && Object.keys(node.named).length > 0) {
216
+ const exports = Object.entries(node.named).map(([key, value]) => {
258
217
  const translatedKey = this.translate(key)
259
218
  const translatedValue = this.generateNode(value)
260
219
  return translatedKey === translatedValue ? translatedKey : `${translatedKey}: ${translatedValue}`
261
220
  })
262
- this.writeLine(`module.exports = { ${exportsList.join(', ')} };`)
221
+ this.writeLine(`module.exports = { ${exports.join(', ')} };`)
222
+ } else if (node.default) {
223
+ const value = this.generateNode(node.default)
224
+ this.writeLine(`module.exports = ${value};`)
263
225
  }
264
226
  }
265
227
 
266
- generateExportsStatement(node) {
267
- const name = this.translate(node.name)
268
- const value = this.generateNode(node.value)
269
- this.writeLine(`exports.${name} = ${value};`)
270
- }
271
-
272
228
  generateServerCreation(node) {
273
229
  const framework = node.framework || 'http'
274
230
 
@@ -294,7 +250,7 @@ class NodeGenerator extends JSGenerator {
294
250
  const port = node.port || 3000
295
251
  this.writeLine(`app.listen(${port}, () => {`)
296
252
  this.indent++
297
- this.writeLine(`console.log('Serveur démarré sur le port ${port}');`)
253
+ this.writeLine(`console.log('Serveur démarré sur le port ${port}');`)
298
254
  this.indent--
299
255
  this.writeLine('});')
300
256
  } else {
@@ -317,7 +273,7 @@ class NodeGenerator extends JSGenerator {
317
273
  const port = node.port || 3000
318
274
  this.writeLine(`server.listen(${port}, () => {`)
319
275
  this.indent++
320
- this.writeLine(`console.log('Serveur démarré sur le port ${port}');`)
276
+ this.writeLine(`console.log('Serveur démarré sur le port ${port}');`)
321
277
  this.indent--
322
278
  this.writeLine('});')
323
279
  }
@@ -383,7 +339,7 @@ class NodeGenerator extends JSGenerator {
383
339
  }
384
340
  break
385
341
 
386
- case 'écrire':
342
+ case 'ecrire':
387
343
  case 'write':
388
344
  const content = this.generateNode(node.content)
389
345
  if (node.sync) {
@@ -454,7 +410,7 @@ class NodeGenerator extends JSGenerator {
454
410
  this.writeLine(`const ${node.variable || 'readStream'} = fs.createReadStream(${source});`)
455
411
  break
456
412
 
457
- case 'écrire flux':
413
+ case 'ecrire flux':
458
414
  case 'createWriteStream':
459
415
  this.writeLine(`const ${node.variable || 'writeStream'} = fs.createWriteStream(${source});`)
460
416
  break
@@ -5,8 +5,6 @@ class PHPGenerator {
5
5
  this.i18n = null
6
6
  this.indent = 0
7
7
  this.output = ''
8
- this.keywordMap = {}
9
- this.functionMap = {}
10
8
 
11
9
  if (i18nPath) {
12
10
  this.loadI18n(i18nPath)
@@ -80,7 +78,7 @@ class PHPGenerator {
80
78
  'faire': 'do',
81
79
  'selon': 'switch',
82
80
  'cas': 'case',
83
- 'défaut': 'default',
81
+ 'defaut': 'default',
84
82
  'sortir': 'break',
85
83
  'continuer': 'continue',
86
84
  'essayer': 'try',
@@ -91,21 +89,21 @@ class PHPGenerator {
91
89
  'classe': 'class',
92
90
  'interface': 'interface',
93
91
  'trait': 'trait',
94
- 'étend': 'extends',
95
- 'implémente': 'implements',
92
+ 'etend': 'extends',
93
+ 'implemente': 'implements',
96
94
  'utiliser': 'use',
97
95
  'public': 'public',
98
- 'privé': 'private',
99
- 'protégé': 'protected',
96
+ 'prive': 'private',
97
+ 'protege': 'protected',
100
98
  'statique': 'static',
101
99
  'final': 'final',
102
100
  'abstrait': 'abstract',
103
101
  'constructeur': '__construct',
104
102
  'destructeur': '__destruct',
105
103
  'obtenir': '__get',
106
- 'définir': '__set',
104
+ 'definir': '__set',
107
105
  'appeler': '__call',
108
- 'vers chaîne': '__toString',
106
+ 'vers chaine': '__toString',
109
107
  'espace de noms': 'namespace',
110
108
  'comme': 'as',
111
109
  'vrai': 'true',
@@ -121,10 +119,10 @@ class PHPGenerator {
121
119
  'different': '!==',
122
120
  'concatener': '.',
123
121
  'tableau': 'array',
124
- 'chaîne': 'string',
122
+ 'chaine': 'string',
125
123
  'entier': 'int',
126
124
  'flottant': 'float',
127
- 'booléen': 'bool',
125
+ 'booleen': 'bool',
128
126
  'objet': 'object',
129
127
  'vide': 'void',
130
128
  'mixte': 'mixed',
@@ -136,7 +134,7 @@ class PHPGenerator {
136
134
  'imploser': 'implode',
137
135
  'remplacer': 'str_replace',
138
136
  'position': 'strpos',
139
- 'sous chaîne': 'substr',
137
+ 'sous chaine': 'substr',
140
138
  'majuscules': 'strtoupper',
141
139
  'minuscules': 'strtolower',
142
140
  'supprimer espaces': 'trim',
@@ -145,21 +143,21 @@ class PHPGenerator {
145
143
  'fusionner': 'array_merge',
146
144
  'filtrer': 'array_filter',
147
145
  'mapper': 'array_map',
148
- 'réduire': 'array_reduce',
146
+ 'reduire': 'array_reduce',
149
147
  'trier': 'sort',
150
148
  'inverser': 'array_reverse',
151
- 'clés': 'array_keys',
149
+ 'cles': 'array_keys',
152
150
  'valeurs': 'array_values',
153
151
  'existe': 'isset',
154
152
  'vide test': 'empty',
155
153
  'est tableau': 'is_array',
156
- 'est chaîne': 'is_string',
154
+ 'est chaine': 'is_string',
157
155
  'est entier': 'is_int',
158
156
  'est flottant': 'is_float',
159
157
  'est numerique': 'is_numeric',
160
158
  'est nul': 'is_null',
161
159
  'type de': 'gettype',
162
- 'convertir chaîne': 'strval',
160
+ 'convertir chaine': 'strval',
163
161
  'convertir entier': 'intval',
164
162
  'convertir flottant': 'floatval',
165
163
  'date': 'date',
@@ -167,24 +165,23 @@ class PHPGenerator {
167
165
  'maintenant': 'now',
168
166
  'fichier existe': 'file_exists',
169
167
  'lire fichier': 'file_get_contents',
170
- 'écrire fichier': 'file_put_contents',
168
+ 'ecrire fichier': 'file_put_contents',
171
169
  'ouvrir': 'fopen',
172
170
  'fermer': 'fclose',
173
171
  'lire': 'fread',
174
- 'écrire': 'fwrite',
172
+ 'ecrire': 'fwrite',
175
173
  'json encoder': 'json_encode',
176
- 'json décoder': 'json_decode',
177
174
  'json decoder': 'json_decode',
178
175
  'regex correspondance': 'preg_match',
179
176
  'regex toutes': 'preg_match_all',
180
177
  'regex remplacer': 'preg_replace',
181
178
  'en tete': 'header',
182
179
  'rediriger': 'header',
183
- 'session démarrer': 'session_start',
180
+ 'session demarrer': 'session_start',
184
181
  'session': '$_SESSION',
185
182
  'post': '$_POST',
186
183
  'get': '$_GET',
187
- 'requête': '$_REQUEST',
184
+ 'requete': '$_REQUEST',
188
185
  'serveur': '$_SERVER',
189
186
  'fichiers': '$_FILES',
190
187
  'cookie': '$_COOKIE',
@@ -201,37 +198,35 @@ class PHPGenerator {
201
198
  }
202
199
 
203
200
  generate(ast) {
204
- this.output = ''
201
+ this.output = '<?php\n\n'
205
202
  this.indent = 0
206
203
 
207
204
  if (Array.isArray(ast)) {
208
205
  for (const node of ast) {
209
- const result = this.generateNode(node)
210
- if (result !== undefined && result !== '' && this.output === '') {
211
- return result
212
- }
206
+ this.generateNode(node)
213
207
  }
214
208
  } else if (ast && ast.type) {
215
- const result = this.generateNode(ast)
216
- if (result !== undefined && result !== '' && this.output === '') {
217
- return result
218
- }
209
+ this.generateNode(ast)
219
210
  } else if (ast && ast.body) {
220
211
  for (const node of ast.body) {
221
- const result = this.generateNode(node)
222
- if (result !== undefined && result !== '' && this.output === '') {
223
- return result
224
- }
212
+ this.generateNode(node)
225
213
  }
226
214
  }
227
215
 
228
- return this.output.trim() || '<?php'
216
+ return this.output.trim()
229
217
  }
230
218
 
231
219
  generateNode(node) {
232
220
  if (!node) return ''
233
221
 
234
222
  switch (node.type) {
223
+ case 'Program':
224
+ if (node.body) {
225
+ for (const child of node.body) {
226
+ this.generateNode(child)
227
+ }
228
+ }
229
+ return
235
230
  case 'VariableDeclaration':
236
231
  return this.generateVariableDeclaration(node)
237
232
  case 'FunctionDeclaration':
@@ -278,8 +273,6 @@ class PHPGenerator {
278
273
  return this.generateBinaryExpression(node)
279
274
  case 'AssignmentExpression':
280
275
  return this.generateAssignmentExpression(node)
281
- case 'UpdateExpression':
282
- return this.generateUpdateExpression(node)
283
276
  case 'ArrayExpression':
284
277
  return this.generateArrayExpression(node)
285
278
  case 'ObjectExpression':
@@ -291,29 +284,25 @@ class PHPGenerator {
291
284
  case 'NewExpression':
292
285
  return this.generateNewExpression(node)
293
286
  default:
294
- if (node.name && !node.type) {
295
- return this.generateIdentifier(node)
296
- }
297
287
  return ''
298
288
  }
299
289
  }
300
290
 
301
- generateUpdateExpression(node) {
302
- const arg = this.generateNode(node.argument)
303
- const op = node.operator
304
- if (node.prefix) {
305
- return `${op}${arg}`
306
- }
307
- return `${arg}${op}`
308
- }
309
-
310
291
  generateVariableDeclaration(node) {
311
- const declarations = node.declarations || []
312
-
313
- for (const decl of declarations) {
314
- const name = this.generateIdentifier(decl.id || { name: decl.name })
315
- if (decl.init) {
316
- const init = this.generateNode(decl.init)
292
+ if (node.declarations && node.declarations.length > 0) {
293
+ for (const decl of node.declarations) {
294
+ const name = this.generateIdentifier(decl.id || { name: decl.name })
295
+ if (decl.init) {
296
+ const init = this.generateNode(decl.init)
297
+ this.writeLine(`${name} = ${init};`)
298
+ } else {
299
+ this.writeLine(`${name};`)
300
+ }
301
+ }
302
+ } else {
303
+ const name = '$' + (node.name || (node.id && node.id.name) || 'var')
304
+ if (node.init) {
305
+ const init = this.generateNode(node.init)
317
306
  this.writeLine(`${name} = ${init};`)
318
307
  } else {
319
308
  this.writeLine(`${name};`)
@@ -433,22 +422,14 @@ class PHPGenerator {
433
422
 
434
423
  if (node.alternate) {
435
424
  if (node.alternate.type === 'IfStatement') {
436
- this.output = this.output.trimEnd() + '\n' + this.getIndent() + '} elseif '
425
+ this.output = this.output.trimEnd() + ' elseif '
437
426
  const altTest = this.generateNode(node.alternate.test)
438
427
  this.output += `(${altTest}) {\n`
439
428
  this.indent++
440
429
  this.generateNode(node.alternate.consequent)
441
430
  this.indent--
442
431
  if (node.alternate.alternate) {
443
- if (node.alternate.alternate.type === 'IfStatement') {
444
- this.generateIfStatement({ test: node.alternate.alternate.test, consequent: node.alternate.alternate.consequent, alternate: node.alternate.alternate.alternate })
445
- } else {
446
- this.writeLine('} else {')
447
- this.indent++
448
- this.generateNode(node.alternate.alternate)
449
- this.indent--
450
- this.writeLine('}')
451
- }
432
+ this.generateIfStatement({ alternate: node.alternate.alternate })
452
433
  } else {
453
434
  this.writeLine('}')
454
435
  }
@@ -690,9 +671,6 @@ class PHPGenerator {
690
671
  }
691
672
 
692
673
  writeLine(text) {
693
- if (this.output === '') {
694
- this.output = '<?php '
695
- }
696
674
  this.output += this.getIndent() + text + '\n'
697
675
  }
698
676