[PATCH v4 09/14] tools/dot2c: Fix generated files going over 100 column limit

Gabriele Monaco posted 14 patches 2 months, 2 weeks ago
There is a newer version of this series
[PATCH v4 09/14] tools/dot2c: Fix generated files going over 100 column limit
Posted by Gabriele Monaco 2 months, 2 weeks ago
The dot2c.py script generates all states in a single line. This breaks the
100 column limit when the state machines are non-trivial.

Change dot2c.py to generate the states in separate lines in case the
generated line is going to be too long.

Also adapt existing monitors with line length over the limit.

Suggested-by: Nam Cao <namcao@linutronix.de>
Signed-off-by: Gabriele Monaco <gmonaco@redhat.com>
---
 kernel/trace/rv/monitors/snep/snep.h    | 14 ++++++++++++--
 tools/verification/rvgen/rvgen/dot2c.py | 20 +++++++++++---------
 2 files changed, 23 insertions(+), 11 deletions(-)

diff --git a/kernel/trace/rv/monitors/snep/snep.h b/kernel/trace/rv/monitors/snep/snep.h
index 6d16b9ad931e1..4cd9abb77b7b2 100644
--- a/kernel/trace/rv/monitors/snep/snep.h
+++ b/kernel/trace/rv/monitors/snep/snep.h
@@ -41,8 +41,18 @@ static const struct automaton_snep automaton_snep = {
 		"schedule_exit"
 	},
 	.function = {
-		{ non_scheduling_context_snep, non_scheduling_context_snep, scheduling_contex_snep,               INVALID_STATE },
-		{               INVALID_STATE,               INVALID_STATE,          INVALID_STATE, non_scheduling_context_snep },
+		{
+			non_scheduling_context_snep,
+			non_scheduling_context_snep,
+			scheduling_contex_snep,
+			INVALID_STATE
+		},
+		{
+			INVALID_STATE,
+			INVALID_STATE,
+			INVALID_STATE,
+			non_scheduling_context_snep
+		},
 	},
 	.initial_state = non_scheduling_context_snep,
 	.final_states = { 1, 0 },
diff --git a/tools/verification/rvgen/rvgen/dot2c.py b/tools/verification/rvgen/rvgen/dot2c.py
index 6009caf568d92..97112b65b4177 100644
--- a/tools/verification/rvgen/rvgen/dot2c.py
+++ b/tools/verification/rvgen/rvgen/dot2c.py
@@ -152,28 +152,30 @@ class Dot2c(Automata):
         max_state_name = max(self.states, key = len).__len__()
         return max(max_state_name, self.invalid_state_str.__len__())
 
-    def __get_state_string_length(self):
-        maxlen = self.__get_max_strlen_of_states() + self.enum_suffix.__len__()
-        return "%" + str(maxlen) + "s"
-
     def get_aut_init_function(self):
         nr_states = self.states.__len__()
         nr_events = self.events.__len__()
         buff = []
 
-        strformat = self.__get_state_string_length()
-
+        maxlen = self.__get_max_strlen_of_states() + len(self.enum_suffix)
+        tab_braces = 2 * 8 + 2 + 1 # "\t\t{ " ... "}"
+        comma_space = 2 # ", " count last comma here
+        linetoolong = tab_braces + (maxlen + comma_space) * nr_events >= self.line_length
         for x in range(nr_states):
-            line = "\t\t{ "
+            line = "\t\t{\n" if linetoolong else "\t\t{ "
             for y in range(nr_events):
                 next_state = self.function[x][y]
                 if next_state != self.invalid_state_str:
                     next_state = self.function[x][y] + self.enum_suffix
 
+                if linetoolong:
+                    line += "\t\t\t%s" % next_state
+                else:
+                    line += "%*s" % (maxlen, next_state)
                 if y != nr_events-1:
-                    line = line + strformat % next_state + ", "
+                    line += ",\n" if linetoolong else ", "
                 else:
-                    line = line + strformat % next_state + " },"
+                    line += "\n\t\t}," if linetoolong else " },"
             buff.append(line)
 
         return self.__buff_to_string(buff)
-- 
2.50.1
Re: [PATCH v4 09/14] tools/dot2c: Fix generated files going over 100 column limit
Posted by Nam Cao 2 months, 2 weeks ago
On Mon, Jul 21, 2025 at 10:23:19AM +0200, Gabriele Monaco wrote:
> The dot2c.py script generates all states in a single line. This breaks the
> 100 column limit when the state machines are non-trivial.
> 
> Change dot2c.py to generate the states in separate lines in case the
> generated line is going to be too long.
> 
> Also adapt existing monitors with line length over the limit.
> 
> Suggested-by: Nam Cao <namcao@linutronix.de>
> Signed-off-by: Gabriele Monaco <gmonaco@redhat.com>
> ---
> -        strformat = self.__get_state_string_length()
> -
> +        maxlen = self.__get_max_strlen_of_states() + len(self.enum_suffix)
> +        tab_braces = 2 * 8 + 2 + 1 # "\t\t{ " ... "}"
> +        comma_space = 2 # ", " count last comma here

PEP8 prefers two spaces before the comments.

> +        linetoolong = tab_braces + (maxlen + comma_space) * nr_events >= self.line_length

Shouldn't this be '>' instead of '>='? 100 columns are still within the
limit.

Nam
Re: [PATCH v4 09/14] tools/dot2c: Fix generated files going over 100 column limit
Posted by Gabriele Monaco 2 months, 2 weeks ago
On Mon, 2025-07-21 at 16:52 +0200, Nam Cao wrote:
> On Mon, Jul 21, 2025 at 10:23:19AM +0200, Gabriele Monaco wrote:
> > The dot2c.py script generates all states in a single line. This
> > breaks the
> > 100 column limit when the state machines are non-trivial.
> > 
> > Change dot2c.py to generate the states in separate lines in case
> > the
> > generated line is going to be too long.
> > 
> > Also adapt existing monitors with line length over the limit.
> > 
> > Suggested-by: Nam Cao <namcao@linutronix.de>
> > Signed-off-by: Gabriele Monaco <gmonaco@redhat.com>
> > ---
> > -        strformat = self.__get_state_string_length()
> > -
> > +        maxlen = self.__get_max_strlen_of_states() +
> > len(self.enum_suffix)
> > +        tab_braces = 2 * 8 + 2 + 1 # "\t\t{ " ... "}"
> > +        comma_space = 2 # ", " count last comma here
> 
> PEP8 prefers two spaces before the comments.
> 
> > +        linetoolong = tab_braces + (maxlen + comma_space) *
> > nr_events >= self.line_length
> 
> Shouldn't this be '>' instead of '>='? 100 columns are still within
> the limit.

Right, will do.

Thanks,
Gabriele