nitlanguage
/
nit.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Rename REAMDE to README.md
[nit.git]
/
src
/
pretty.nit
diff --git
a/src/pretty.nit
b/src/pretty.nit
index
2028628
..
e4d848d
100644
(file)
--- a/
src/pretty.nit
+++ b/
src/pretty.nit
@@
-121,10
+121,11
@@
class PrettyPrinterVisitor
# Is the node inlinable and can fit on the line.
fun can_inline(n: nullable ANode): Bool do
if n == null then return true
# Is the node inlinable and can fit on the line.
fun can_inline(n: nullable ANode): Bool do
if n == null then return true
+ if no_inline and n.location.line_start != n.location.line_end then return false
if n.must_be_inline then return true
if n.must_be_block then return false
# check length
if n.must_be_inline then return true
if n.must_be_block then return false
# check length
- if n.collect_length + current_length > max_size then return false
+ if max_size > 0 and n.collect_length + current_length > max_size then return false
# check block is inlinable
return n.is_inlinable
end
# check block is inlinable
return n.is_inlinable
end
@@
-165,8
+166,14
@@
class PrettyPrinterVisitor
end
end
end
end
+ # Consume comments and end of lines if any
+ fun consume_comments do
+ while current_token isa TEol or current_token isa TComment do visit current_token
+ end
+
# Visit `current_token`.
fun consume(token: String) do
# Visit `current_token`.
fun consume(token: String) do
+ consume_comments
if current_token.text == token then else current_token.debug("Got `{current_token.text}`; expected `{token}`.")
visit current_token
end
if current_token.text == token then else current_token.debug("Got `{current_token.text}`; expected `{token}`.")
visit current_token
end
@@
-213,7
+220,8
@@
class PrettyPrinterVisitor
var tab_size = 8
# Max line size.
var tab_size = 8
# Max line size.
- var max_size = 80
+ # 0 (or negative) to disable.
+ var max_size = 80 is writable
# Length of the current line.
var current_length = 0
# Length of the current line.
var current_length = 0
@@
-277,6
+285,9
@@
class PrettyPrinterVisitor
# Do we force the deletion of empty lines?
var skip_empty = false is public writable
# Do we force the deletion of empty lines?
var skip_empty = false is public writable
+
+ # Disable automatic inlining.
+ var no_inline = false is writable
end
# Base framework redefs
end
# Base framework redefs
@@
-286,6
+297,8
@@
redef class ANodes[E]
for e in self do
var e_can_inline = v.can_inline(e)
for e in self do
var e_can_inline = v.can_inline(e)
+ if v.current_token isa TComma then v.skip
+
if e != first then
if not e_can_inline then
v.add ","
if e != first then
if not e_can_inline then
v.add ","
@@
-1050,7
+1063,7
@@
redef class AExternCalls
v.adds
v.visit_list n_extern_calls
else
v.adds
v.visit_list n_extern_calls
else
- v.addn
+ v.forcen
v.indent += 1
v.addt
v.indent -= 1
v.indent += 1
v.addt
v.indent -= 1
@@
-1150,7
+1163,7
@@
redef class TExternCodeSegment
v.add "`\{"
if not lines.first.trim.is_empty then
v.add "`\{"
if not lines.first.trim.is_empty then
- v.addn
+ v.forcen
lines.first.l_trim
v.indent += 1
v.addt
lines.first.l_trim
v.indent += 1
v.addt
@@
-1227,7
+1240,7
@@
redef class AIfExpr
v.adds
else
v.visit n_expr
v.adds
else
v.visit n_expr
- v.addn
+ v.forcen
v.addt
end
v.addt
end
@@
-1278,10
+1291,11
@@
redef class AIfExpr
end
end
end
end
- if has_else(v) then
- while not v.current_token isa TKwelse do
- v.consume v.current_token.text
- end
+ v.consume_comments
+
+ # FIXME: for some unknown reasons, has_else can be true even if
+ # there is no `else` keyword but a `end` instead.
+ if has_else(v) and v.current_token isa TKwelse then
v.indent -= 1
v.addt
v.indent -= 1
v.addt
@@
-1568,7
+1582,7
@@
redef class ACallExpr
v.visit_recv n_expr
if not n_expr isa AImplicitSelfExpr and not can_inline then
v.visit_recv n_expr
if not n_expr isa AImplicitSelfExpr and not can_inline then
- v.addn
+ v.forcen
v.addt
end
v.addt
end
@@
-1717,7
+1731,7
@@
redef class ANewExpr
v.consume "."
if not can_inline then
v.consume "."
if not can_inline then
- v.addn
+ v.forcen
v.indent += 1
v.addt
v.indent -= 1
v.indent += 1
v.addt
v.indent -= 1
@@
-1835,7
+1849,7
@@
redef class AAssertExpr
else
v.addt
v.visit n_else
else
v.addt
v.visit n_else
- v.addn
+ v.forcen
v.indent -= 1
v.addt
v.add "end"
v.indent -= 1
v.addt
v.add "end"
@@
-1963,7
+1977,7
@@
private class ABinOpHelper
v.adds
v.visit bin_expr2
else
v.adds
v.visit bin_expr2
else
- v.addn
+ v.forcen
v.indent += 1
v.addt
v.indent -= 1
v.indent += 1
v.addt
v.indent -= 1
@@
-2030,16
+2044,9
@@
end
# Syntax
# Syntax
-redef class AUplusExpr
- redef fun accept_pretty_printer(v) do
- v.consume "+"
- v.visit n_expr
- end
-end
-
-redef class AUminusExpr
+redef class AUnaryopExpr
redef fun accept_pretty_printer(v) do
redef fun accept_pretty_printer(v) do
- v.consume "-"
+ v.visit n_op
v.visit n_expr
end
end
v.visit n_expr
end
end
@@
-2061,6
+2068,11
@@
redef class AArrayExpr
redef fun accept_pretty_printer(v) do
v.consume "["
v.visit_list n_exprs
redef fun accept_pretty_printer(v) do
v.consume "["
v.visit_list n_exprs
+ if n_type != null then
+ v.consume ":"
+ v.adds
+ v.visit n_type
+ end
v.consume "]"
end
end
v.consume "]"
end
end
@@
-2104,7
+2116,7
@@
redef class AStringFormExpr
while i < text.length do
v.add text[i].to_s
while i < text.length do
v.add text[i].to_s
- if v.current_length >= v.max_size and i <= text.length - 3 then
+ if v.max_size > 0 and v.current_length >= v.max_size and i <= text.length - 3 then
v.add "\" +"
if was_inline then
v.forcen
v.add "\" +"
if was_inline then
v.forcen