nitlanguage
/
nit.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
nitcorn/file_server: extract answer_directory_listing method
[nit.git]
/
src
/
frontend
/
simple_misc_analysis.nit
diff --git
a/src/frontend/simple_misc_analysis.nit
b/src/frontend/simple_misc_analysis.nit
index
26d6710
..
4934e1a
100644
(file)
--- a/
src/frontend/simple_misc_analysis.nit
+++ b/
src/frontend/simple_misc_analysis.nit
@@
-24,6
+24,7
@@
module simple_misc_analysis
import phase
redef class ToolContext
import phase
redef class ToolContext
+ # Execute `AModule::do_simple_misc_analysis` on each module.
var simple_misc_analysis_phase: Phase = new SimpleMiscAnalysisPhase(self, null)
end
var simple_misc_analysis_phase: Phase = new SimpleMiscAnalysisPhase(self, null)
end
@@
-39,6
+40,12
@@
redef class AModule
do
var v = new SimpleMiscVisitor(toolcontext)
v.enter_visit(self)
do
var v = new SimpleMiscVisitor(toolcontext)
v.enter_visit(self)
+
+ var t = location.file.first_token
+ while t != null do
+ t.accept_simple_misc_token(v)
+ t = t.next_token
+ end
end
end
end
end
@@
-54,14
+61,17
@@
private class SimpleMiscVisitor
var toolcontext: ToolContext
var toolcontext: ToolContext
- fun warning(node: ANode, msg: String)
+ fun warning(node: ANode, tag, msg: String)
do
do
- toolcontext.warning(node.hot_location, msg)
+ toolcontext.warning(node.hot_location, tag, msg)
end
end
- init(toolcontext: ToolContext)
+ # Issue a warning if `sub` is a standalone `do` block.
+ fun check_do_expr(sub: nullable AExpr)
do
do
- self.toolcontext = toolcontext
+ if sub isa ADoExpr then
+ warning(sub, "useless-do", "Warning: superfluous `do` block.")
+ end
end
end
end
end
@@
-77,11
+87,17
@@
redef class ANode
private fun after_simple_misc(v: SimpleMiscVisitor) do end
end
private fun after_simple_misc(v: SimpleMiscVisitor) do end
end
+redef class Token
+ private fun accept_simple_misc_token(v: SimpleMiscVisitor)
+ do
+ end
+end
+
redef class ASignature
redef fun after_simple_misc(v)
do
if self.n_opar != null and self.n_params.is_empty then
redef class ASignature
redef fun after_simple_misc(v)
do
if self.n_opar != null and self.n_params.is_empty then
- v.warning(self, "Warning: superfluous parentheses.")
+ v.warning(self, "parentheses", "Warning: superfluous parentheses.")
end
end
end
end
end
end
@@
-94,7
+110,7
@@
end
redef class AParExpr
redef fun warn_parentheses(v)
do
redef class AParExpr
redef fun warn_parentheses(v)
do
- v.warning(self, "Warning: superfluous parentheses.")
+ v.warning(self, "parentheses", "Warning: superfluous parentheses.")
end
end
end
end
@@
-102,7
+118,7
@@
redef class AParExprs
redef fun after_simple_misc(v)
do
if n_exprs.is_empty then
redef fun after_simple_misc(v)
do
if n_exprs.is_empty then
- v.warning(self, "Warning: superfluous parentheses.")
+ v.warning(self, "parentheses", "Warning: superfluous parentheses.")
end
end
end
end
end
end
@@
-117,7
+133,7
@@
redef class AReturnExpr
end
end
end
end
-redef class AContinueExpr
+redef class AEscapeExpr
redef fun after_simple_misc(v)
do
var e = n_expr
redef fun after_simple_misc(v)
do
var e = n_expr
@@
-127,34
+143,53
@@
redef class AContinueExpr
end
end
end
end
-redef class ABreakExpr
+redef class AWhileExpr
redef fun after_simple_misc(v)
do
redef fun after_simple_misc(v)
do
- var e = n_expr
- if e != null then
- e.warn_parentheses(v)
+ if n_expr isa ATrueExpr then
+ v.warning(self, "loop", "Warning: use `loop` instead of `while true do`.")
+ else
+ n_expr.warn_parentheses(v)
end
end
+ v.check_do_expr(n_block)
end
end
end
end
-redef class AWhileExpr
+redef class ADoExpr
redef fun after_simple_misc(v)
do
redef fun after_simple_misc(v)
do
- if n_expr isa ATrueExpr then
- v.warning(self, "Warning: use 'loop' instead of 'while true do'.")
- else
- n_expr.warn_parentheses(v)
- end
+ v.check_do_expr(n_block)
+ end
+end
+
+redef class ALoopExpr
+ redef fun after_simple_misc(v)
+ do
+ v.check_do_expr(n_block)
end
end
redef class AForExpr
redef fun after_simple_misc(v)
do
end
end
redef class AForExpr
redef fun after_simple_misc(v)
do
+ v.check_do_expr(n_block)
+ end
+end
+
+redef class AForGroup
+ redef fun after_simple_misc(v)
+ do
n_expr.warn_parentheses(v)
end
end
n_expr.warn_parentheses(v)
end
end
+redef class AWithExpr
+ redef fun after_simple_misc(v)
+ do
+ v.check_do_expr(n_block)
+ end
+end
+
redef class AIfExpr
redef fun after_simple_misc(v)
do
redef class AIfExpr
redef fun after_simple_misc(v)
do
@@
-173,7
+208,7
@@
redef class AOnceExpr
redef fun accept_simple_misc(v)
do
if v.once_count > 0 then
redef fun accept_simple_misc(v)
do
if v.once_count > 0 then
- v.warning(self, "Useless once in a once expression.")
+ v.warning(self, "nested-once", "Warning: useless once in a once expression.")
end
v.once_count = v.once_count + 1
end
v.once_count = v.once_count + 1
@@
-182,3
+217,25
@@
redef class AOnceExpr
v.once_count = v.once_count - 1
end
end
v.once_count = v.once_count - 1
end
end
+
+redef class TSemi
+ redef fun accept_simple_misc_token(v)
+ do
+ var n = next_token
+ var p = prev_token
+ if
+ n == null or
+ n isa TEol or
+ n isa EOF or
+ n isa TComment or
+ p == null or
+ p isa TEol or
+ p isa EOF or
+ p isa TComment or
+ p isa TSemi
+ then
+ v.warning(self, "semi", "Warning: superfluous `;`.")
+ return
+ end
+ end
+end