pep8analysis: show annotated CFG in web interface
[nit.git] / contrib / pep8analysis / src / pep8analysis_web.nit
1 module pep8analysis_web
2
3 import emscripten
4
5 import backbone
6 import ast
7 import model
8 import cfg
9 import flow_analysis
10
11 redef class AnalysisManager
12
13 fun run(src: String)
14 do
15 var stream = new StringIStream(src)
16 var ast = build_ast("web", stream)
17 assert ast != null
18
19 if failed then exit 1
20
21 # Build program model
22 var model = build_model(ast)
23 if failed then exit 1
24
25 if model.lines.is_empty then
26 fatal_error( ast, "This programs appears empty" )
27 exit 1
28 end
29
30 # Create CFG
31 var cfg = build_cfg(model)
32 if failed then exit 1
33
34 # Run analyses
35
36 ## Reaching defs
37 do_reaching_defs_analysis(cfg)
38
39 ## Range
40 do_range_analysis(ast, cfg)
41
42 ## Types
43 do_types_analysis(ast, cfg)
44
45 print_notes
46 if notes.is_empty then print "Success: Nothing wrong detected"
47
48 var of = new StringOStream
49 cfg.print_dot(of, true)
50 of.close
51 show_graph(of.to_s)
52
53 # Ready next
54 reset
55 clear
56 end
57
58 fun show_graph(content: String) do "show_graph('{content.escape_to_c}');".run_js
59 end
60
61 class StringIStream
62 super BufferedIStream
63
64 init(str: String) do _buffer = new FlatBuffer.from(str)
65
66 redef fun fill_buffer do end_reached = true
67 redef var end_reached: Bool = false
68 end
69
70 redef class Object
71 redef fun manager do return once new AnalysisManager
72 end
73
74 manager.run args.first