Skip to content

Commit 786b7f1

Browse files
committed
[Prettify] Fix validity
1 parent 8bbfe7a commit 786b7f1

File tree

1 file changed

+25
-8
lines changed

1 file changed

+25
-8
lines changed

source/server/prettify.hexa

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ class Prettify {
4747
// TODO remove `:` here!
4848
case Block(el):
4949
// TODO depth!
50-
`{\n` + el.map(e => this.stringify(e)).join('\n') + `\n}`
50+
return `{\n\t` + el.map(e => this.stringify(e)).join('\n\t') + `\n}`
5151

5252
/// `if condition[0], ...condition[n] { then } [else { otherwise }]`
5353
case If(condition, then, otherwise, ternary):
@@ -103,19 +103,23 @@ class Prettify {
103103
/// `(vars) retType => expr`
104104
// TODO parser `: retType` is really needed at all?
105105
case Arrow(expr, vars, retType):
106+
var head = '(' + vars.map(v => this.stringify(v).substr(4)).join(', ') + ')'
107+
106108
if let retType = retType {
107-
return '(' + vars.map(v => this.stringify(v)).join(', ') + ') => ' + this.stringify(expr) + ': ' + NodeType.stringify(retType)
109+
head += NodeType.stringify(retType) + ' => '
108110
} else {
109-
return '(' + vars.map(v => this.stringify(v)).join(', ') + ') => ' + this.stringify(expr)
111+
head += ' => '
110112
}
111113

114+
return head + this.stringify(expr)
115+
112116
// // var Var[0], ..., Var[n]
113117
// Vars(vars [Node])
114118
//
115119
/// `external class t extends extend implements implement { fields }`
116120
// TODO IDE: hover over `(className)` in the pattern itself must show its type
117121
case Class(className, extend, implement, fields, external, kind):
118-
return 'class ' + className + ' ' + (extend ? 'extends ' + extend : '') + ' ' + (implement ? 'implements ' + implement : '') + ' {\n' + fields.map(f => this.stringify(f)).join('\n') + '\n}'
122+
return 'class ' + NodeType.stringify(className) + ' ' + (extend ? 'extends ' + extend : '') + (implement.length > 0 ? 'implements ' + implement : '') + ' {\n' + fields.map(f => this.stringify(f)).join('\n') + '\n}'
119123

120124
/// var name T { get { return x } set (v) {} }
121125
// TODO .Var, .Function, .Function
@@ -140,7 +144,7 @@ class Prettify {
140144
/// }
141145
case Switch(inputs , expressions , guards , patterns ):
142146
return 'switch ' + [for i in inputs.length this.stringify(inputs[i])].join(', ') + ' {\n' +
143-
[for i in patterns.length 'case ' + this.stringify(patterns[i]) + ': ' + this.stringify(expressions[i])].join('\n') + '\n}'
147+
[for i in patterns.length 'case ' + this.stringify(expressions[i]) + ': ' + this.stringify(patterns[i])].join('\n') + '\n}'
144148

145149
/// module path[0].path[1].r..path[n] { el }
146150
case Module(path , el ):
@@ -217,7 +221,7 @@ class Prettify {
217221
case String(s):
218222
// TODO quote types + mirror special symbols
219223
let s = JSON.stringify(s)
220-
return "'\(s)'"
224+
return s
221225
case Ident(name): return name
222226
case Bool(b): return b ? "true": "false"
223227
case Int(s): return s.toString()
@@ -255,15 +259,28 @@ class Prettify {
255259
}
256260
return
257261
(external ? 'declare ': '') +
258-
(const ? 'let ': 'var ') + name + ' ' + NodeType.stringify(t) + body
262+
(const ? 'let ': 'var ') + name + (t != null? ' ' + NodeType.stringify(t) : '') + body
259263
}
260264
case Function(name, body, vars, returnType, external, variadic):
261265
if name == null {
262266
// TODO `// Anonymous`
263267
return `fun`
264268
}
265269

266-
return 'fun ' + name
270+
// TODO `new_SPACE_`?
271+
let prefix = name == 'new'? 'new ': 'fun ' + name
272+
273+
var head = prefix + '(' + vars.map(v => this.stringify(v).substr(4)).join(', ') + ')'
274+
275+
if let returnType = returnType {
276+
head += ' ' + NodeType.stringify(returnType)
277+
}
278+
279+
if let body = body {
280+
return head + ' ' + this.stringify(body)
281+
}
282+
283+
return head
267284
case _:
268285
// TODO exhaustive
269286
// console.error('stringify', node)

0 commit comments

Comments
 (0)