Charusso added a comment.

Sorry for that much rewrite request but in a script language you have to name 
your stuff properly or you will be completely lost. I have not written a single 
Python class yet, but trust me.

I really like that `DotDumpVisitor` semantic, but it would be a lot better at 
SVG level. At the moment whatever style/table-data you insert it adds an extra 
text tag per styling which is quite inefficient.

We could use "foreignObject" (somehow) and apply pure HTML tables or I could 
use my `<tspan>` idea instead 
(https://developer.mozilla.org/en-US/docs/Web/SVG/Element/tspan). I recommend 
the latter as it is better than a fixed table.

With the current representation it would be difficult to apply every styling to 
tspans. I think it also would be difficult to use your `Explorer` idea as we 
are talking about modificating the SVG dynamically.

In D62638#1522357 <https://reviews.llvm.org/D62638#1522357>, @NoQ wrote:

> > I wrote some tests but i'm not really sure they're worth it.
>
> Mmm, on second thought, they probably won't work out of the box, because they 
> might require installing python modules in order to work. I'm actually not 
> sure if all machines have python3. I'll try but it'll most likely fail. I 
> guess i could try excluding them from `make check-all`.


It would be cool to introduce something like `check-scripts`.



================
Comment at: clang/utils/analyzer/exploded-graph-rewriter.py:5
+import collections
+import json as json_module  # 'json' is a great name for a variable.
+import logging
----------------
I think it is not that cool variable name. I would use the appropiate name of 
the object instead of the generic `json` name.


================
Comment at: clang/utils/analyzer/exploded-graph-rewriter.py:12
+class SourceLocation(object):
+    def __init__(self, json):
+        super(SourceLocation, self).__init__()
----------------
`json` -> `loc`


================
Comment at: clang/utils/analyzer/exploded-graph-rewriter.py:22
+class ProgramPoint(object):
+    def __init__(self, json):
+        super(ProgramPoint, self).__init__()
----------------
`json` -> `program_point` and so on...


================
Comment at: clang/utils/analyzer/exploded-graph-rewriter.py:33
+            self.pretty = json['pretty']
+            self.sloc = SourceLocation(json['location']) \
+                if json['location'] is not None else None
----------------
What about just `loc`?


================
Comment at: clang/utils/analyzer/exploded-graph-rewriter.py:124
+        self.parents = []
+        self.children = []
+
----------------
What about `predecessors` and `successors`? It is the proper name in the Static 
Analyzer world.


================
Comment at: clang/utils/analyzer/exploded-graph-rewriter.py:126
+
+    def set_json(self, node_id, json):
+        logging.debug('Adding ' + node_id)
----------------
- `set_json()` -> `set()` the given `node`
- `json` -> `node`


================
Comment at: clang/utils/analyzer/exploded-graph-rewriter.py:151
+        super(ExplodedGraph, self).__init__()
+        self.nodes = collections.defaultdict(ExplodedNode)
+        self.root_id = None
----------------
`nodes` -> `graph`


================
Comment at: clang/utils/analyzer/exploded-graph-rewriter.py:184
+            # even though in a valid dot file everything is escaped.
+            raw_json = result[2].replace('\\l', '') \
+                                .replace('&nbsp;', '') \
----------------
`raw_json` -> `node_string` which will be a raw JSON after `loads()`.


================
Comment at: clang/utils/analyzer/exploded-graph-rewriter.py:191
+                                .replace('\\>', '\\\\>') \
+                                .rstrip(',')
+            logging.debug(raw_json)
----------------
I have removed the trailing `,` from the end yesterday so `rstrip(',')` is not 
needed.

It would be cool to name the `result[]`, like: `pred_id = result[1]` and 
`succ_id = result[2]` or current/previous ID, or something like that.

I also would put the regexes into a function and you could write:
`pred_id, succ_id = parse_edge()` or something more simpler.

What is `result[0]` btw? That confused me a little-bit.


================
Comment at: clang/utils/analyzer/exploded-graph-rewriter.py:233
+        else:
+            color = 'cyan3'
+
----------------
It would be cool to put it into a "switch-statement" 
(https://stackoverflow.com/questions/60208/replacements-for-switch-statement-in-python).


================
Comment at: clang/utils/analyzer/exploded-graph-rewriter.py:237
+            if p.sloc is not None:
+                self._dump('<tr><td align="left" width="0">'
+                           '%s:<b>%s</b>:<b>%s</b>:</td>'
----------------
I think tables are left aligned by default, so you could remove your left 
alignments.


================
Comment at: clang/utils/analyzer/exploded-graph-rewriter.py:326
+            self._dump('<b>Program point:</b></td></tr>')
+        self._dump('<tr><td align="left" balign="left" width="0">'
+                   '<table border="0" align="left" width="0">')
----------------
I would create a table-builder class to reduce the repetition and for better 
readability what is going on. Also you could avoid `balign` typo.

Then may each class could have its own pretty-print method like LLVM does.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D62638/new/

https://reviews.llvm.org/D62638



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to