NoQ created this revision.
NoQ added a reviewer: Charusso.
Herald added subscribers: cfe-commits, dkrupp, donat.nagy, Szelethus, 
mikhail.ramalho, a.sidorin, szepet, baloghadamsoftware, xazax.hun.
Herald added a project: clang.

When printing various statements that include braces (compound statements, 
lambda expressions, statement-expressions, etc.), replace the code between 
braces with '...'.

I don't mind losing some information here because it's easily recoverable by 
looking at the source code.

Before:
F9450332: Screen Shot 2019-07-02 at 2.25.39 PM.png 
<https://reviews.llvm.org/F9450332>

After:
F9450331: Screen Shot 2019-07-02 at 2.25.46 PM.png 
<https://reviews.llvm.org/F9450331>


Repository:
  rC Clang

https://reviews.llvm.org/D64104

Files:
  clang/test/Analysis/exploded-graph-rewriter/program_points.dot
  clang/utils/analyzer/exploded-graph-rewriter.py


Index: clang/utils/analyzer/exploded-graph-rewriter.py
===================================================================
--- clang/utils/analyzer/exploded-graph-rewriter.py
+++ clang/utils/analyzer/exploded-graph-rewriter.py
@@ -398,6 +398,21 @@
             return '<font color="forestgreen">+</font>'
         return '<font color="red">-</font>'
 
+    @staticmethod
+    def _short_pretty(s):
+        if s is None:
+            return None
+        if len(s) < 20:
+            return s
+        left = s.find('{')
+        right = s.rfind('}')
+        if left == -1 or right == -1 or left >= right:
+            return s
+        candidate = s[0:left + 1] + ' ... ' + s[right:]
+        if len(candidate) >= len(s):
+            return s
+        return candidate
+
     def visit_begin_graph(self, graph):
         self._graph = graph
         self._dump_raw('digraph "ExplodedGraph" {\n')
@@ -433,7 +448,8 @@
                            % (p.loc.filename, p.loc.line,
                               p.loc.col, color, p.stmt_kind,
                               stmt_color, p.stmt_point_kind,
-                              p.pretty if not skip_pretty else ''))
+                              self._short_pretty(p.pretty)
+                              if not skip_pretty else ''))
             else:
                 self._dump('<tr><td align="left" width="0">'
                            '<i>Invalid Source Location</i>:</td>'
@@ -443,7 +459,8 @@
                            '<td>%s</td></tr>'
                            % (color, p.stmt_kind,
                               stmt_color, p.stmt_point_kind,
-                              p.pretty if not skip_pretty else ''))
+                              self._short_pretty(p.pretty)
+                              if not skip_pretty else ''))
         elif p.kind == 'Edge':
             self._dump('<tr><td width="0"></td>'
                        '<td align="left" width="0">'
@@ -496,7 +513,7 @@
                               'lavender' if self._dark_mode else 'darkgreen',
                               ('(%s)' % b.kind) if b.kind is not None else ' '
                           ),
-                          b.pretty, f.bindings[b]))
+                          self._short_pretty(b.pretty), f.bindings[b]))
 
         frames_updated = e.diff_frames(prev_e) if prev_e is not None else None
         if frames_updated:
Index: clang/test/Analysis/exploded-graph-rewriter/program_points.dot
===================================================================
--- clang/test/Analysis/exploded-graph-rewriter/program_points.dot
+++ clang/test/Analysis/exploded-graph-rewriter/program_points.dot
@@ -90,3 +90,27 @@
       }
     ]}
 \l}"];
+
+// Test collapsing large pretty prints with braces.
+
+// CHECK-NEXT: <b>Program point:</b>
+// CHECK-SAME: <td>\{ ... \}</td>
+Node0x3 [shape=record,label=
+ "{
+    { "node_id": 3, "pointer": "0x3",
+      "program_state": null, "program_points": [
+      {
+        "kind": "Statement",
+        "stmt_kind": "CompoundStmt",
+        "stmt_point_kind": "PostStmt",
+        "stmd_id": 6,
+        "pointer": "0x6",
+        "pretty": "{ very very very very very very long pretty print }",
+        "location": {
+          "line": 7,
+          "column": 8
+        },
+        "tag": "ExprEngine : Clean Node"
+      }
+    ]}
+\l}"];


Index: clang/utils/analyzer/exploded-graph-rewriter.py
===================================================================
--- clang/utils/analyzer/exploded-graph-rewriter.py
+++ clang/utils/analyzer/exploded-graph-rewriter.py
@@ -398,6 +398,21 @@
             return '<font color="forestgreen">+</font>'
         return '<font color="red">-</font>'
 
+    @staticmethod
+    def _short_pretty(s):
+        if s is None:
+            return None
+        if len(s) < 20:
+            return s
+        left = s.find('{')
+        right = s.rfind('}')
+        if left == -1 or right == -1 or left >= right:
+            return s
+        candidate = s[0:left + 1] + ' ... ' + s[right:]
+        if len(candidate) >= len(s):
+            return s
+        return candidate
+
     def visit_begin_graph(self, graph):
         self._graph = graph
         self._dump_raw('digraph "ExplodedGraph" {\n')
@@ -433,7 +448,8 @@
                            % (p.loc.filename, p.loc.line,
                               p.loc.col, color, p.stmt_kind,
                               stmt_color, p.stmt_point_kind,
-                              p.pretty if not skip_pretty else ''))
+                              self._short_pretty(p.pretty)
+                              if not skip_pretty else ''))
             else:
                 self._dump('<tr><td align="left" width="0">'
                            '<i>Invalid Source Location</i>:</td>'
@@ -443,7 +459,8 @@
                            '<td>%s</td></tr>'
                            % (color, p.stmt_kind,
                               stmt_color, p.stmt_point_kind,
-                              p.pretty if not skip_pretty else ''))
+                              self._short_pretty(p.pretty)
+                              if not skip_pretty else ''))
         elif p.kind == 'Edge':
             self._dump('<tr><td width="0"></td>'
                        '<td align="left" width="0">'
@@ -496,7 +513,7 @@
                               'lavender' if self._dark_mode else 'darkgreen',
                               ('(%s)' % b.kind) if b.kind is not None else ' '
                           ),
-                          b.pretty, f.bindings[b]))
+                          self._short_pretty(b.pretty), f.bindings[b]))
 
         frames_updated = e.diff_frames(prev_e) if prev_e is not None else None
         if frames_updated:
Index: clang/test/Analysis/exploded-graph-rewriter/program_points.dot
===================================================================
--- clang/test/Analysis/exploded-graph-rewriter/program_points.dot
+++ clang/test/Analysis/exploded-graph-rewriter/program_points.dot
@@ -90,3 +90,27 @@
       }
     ]}
 \l}"];
+
+// Test collapsing large pretty prints with braces.
+
+// CHECK-NEXT: <b>Program point:</b>
+// CHECK-SAME: <td>\{ ... \}</td>
+Node0x3 [shape=record,label=
+ "{
+    { "node_id": 3, "pointer": "0x3",
+      "program_state": null, "program_points": [
+      {
+        "kind": "Statement",
+        "stmt_kind": "CompoundStmt",
+        "stmt_point_kind": "PostStmt",
+        "stmd_id": 6,
+        "pointer": "0x6",
+        "pretty": "{ very very very very very very long pretty print }",
+        "location": {
+          "line": 7,
+          "column": 8
+        },
+        "tag": "ExprEngine : Clean Node"
+      }
+    ]}
+\l}"];
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to