pep8analysis: intro a variant main program for a 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 # Ready next
49 reset
50 clear
51 end
52 end
53
54 class StringIStream
55 super BufferedIStream
56
57 init(str: String) do _buffer = new FlatBuffer.from(str)
58
59 redef fun fill_buffer do end_reached = true
60 redef var end_reached: Bool = false
61 end
62
63 redef class Object
64 redef fun manager do return once new AnalysisManager
65 end
66
67 manager.run args.first