* [PATCH v2 0/6] dtc: dt-check-style: Improvements for handling continued lines
@ 2026-09-09 8:35 Krzysztof Kozlowski
2026-09-09 8:35 ` [PATCH v2 1/6] dtc: dt-check-style: Handle continued lines in check_hex_case() Krzysztof Kozlowski
` (5 more replies)
0 siblings, 6 replies; 9+ messages in thread
From: Krzysztof Kozlowski @ 2026-09-09 8:35 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Saravana Kannan
Cc: devicetree, linux-kernel, Krzysztof Kozlowski
Changes in v2:
1. Four new commits 1-4
2. Drop last commit
v1: https://lore.kernel.org/all/20260906180437.166760-6-krzysztof.kozlowski@oss.qualcomm.com/
Best regards,
Krzysztof
---
Krzysztof Kozlowski (6):
dtc: dt-check-style: Handle continued lines in check_hex_case()
dtc: dt-check-style: Handle continued lines in check_line_length()
dtc: dt-check-style: Handle continued lines in check_trailing_whitespace()
dtc: dt-check-style: Unduplicate checks in check_mixed_indent_chars()
dtc: dt-check-style: Right strip whitespaces, leftovers before comments
dtc: dt-check-style: Properly detect comments in multi-line properties
scripts/dtc/dt-check-style | 103 ++++++++++++---------
.../dtc/dt-style-selftest/bad/dts-cont-align.dts | 1 +
.../dtc/dt-style-selftest/bad/dts-line-length.dts | 3 +-
.../dtc/dt-style-selftest/bad/dts-trailing-ws.dts | 8 ++
.../dtc/dt-style-selftest/bad/yaml-cont-align.yaml | 1 +
.../dtc/dt-style-selftest/bad/yaml-hex-case.yaml | 5 +-
.../dt-style-selftest/bad/yaml-line-length.yaml | 3 +-
.../dt-style-selftest/bad/yaml-trailing-ws.yaml | 5 +-
.../expected/dts-cont-align.dts.txt | 11 ++-
.../expected/dts-line-length.dts.txt | 1 +
.../expected/dts-trailing-ws.dts.txt | 1 +
.../expected/yaml-cont-align.yaml.txt | 3 +-
.../expected/yaml-hex-case.yaml.txt | 2 +
.../expected/yaml-line-length.yaml.txt | 1 +
.../expected/yaml-trailing-ws.yaml.txt | 2 +
.../dtc/dt-style-selftest/good/dts-cont-align.dts | 1 +
.../dt-style-selftest/good/yaml-cont-align.yaml | 1 +
17 files changed, 99 insertions(+), 53 deletions(-)
---
base-commit: 694b801ceb1bea205878f2136e8b25c888e51be7
change-id: 20260909-b4-dts-style-checker-continued-lines-c6895bacb860
Best regards,
--
Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v2 1/6] dtc: dt-check-style: Handle continued lines in check_hex_case()
2026-09-09 8:35 [PATCH v2 0/6] dtc: dt-check-style: Improvements for handling continued lines Krzysztof Kozlowski
@ 2026-09-09 8:35 ` Krzysztof Kozlowski
2026-09-09 8:35 ` [PATCH v2 2/6] dtc: dt-check-style: Handle continued lines in check_line_length() Krzysztof Kozlowski
` (4 subsequent siblings)
5 siblings, 0 replies; 9+ messages in thread
From: Krzysztof Kozlowski @ 2026-09-09 8:35 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Saravana Kannan
Cc: devicetree, linux-kernel, Krzysztof Kozlowski
Continued lines are not separate DtsLine items in ctx.lines, so they
need own iteration. Rule for hex case is applicable to continued values
as well.
Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
---
scripts/dtc/dt-check-style | 24 ++++++++++++++--------
.../dtc/dt-style-selftest/bad/yaml-hex-case.yaml | 5 ++++-
.../expected/yaml-hex-case.yaml.txt | 2 ++
3 files changed, 21 insertions(+), 10 deletions(-)
diff --git a/scripts/dtc/dt-check-style b/scripts/dtc/dt-check-style
index 15a3ba82fd5f..6d978c4d9832 100755
--- a/scripts/dtc/dt-check-style
+++ b/scripts/dtc/dt-check-style
@@ -547,18 +547,24 @@ def check_continuation_alignment(ctx):
dl_value_complete = cont.stripped.endswith('",') or cont.stripped.endswith('>,')
+def _check_hex_case(dl):
+ if dl.linetype in (LineType.BLANK, LineType.COMMENT,
+ LineType.COMMENT_START, LineType.COMMENT_BODY,
+ LineType.COMMENT_END, LineType.PREPROCESSOR):
+ return
+ for m in re.finditer(r'\b0[xX][0-9a-fA-F]+\b', dl.code):
+ lit = m.group(0)
+ if any(c.isupper() for c in lit[2:]) or lit[1] == 'X':
+ yield (dl.lineno,
+ 'hex literal %r must be lowercase' % lit)
+
+
def check_hex_case(ctx):
"""Hex literals (0xN) must use lowercase digits and prefix."""
for dl in ctx.lines:
- if dl.linetype in (LineType.BLANK, LineType.COMMENT,
- LineType.COMMENT_START, LineType.COMMENT_BODY,
- LineType.COMMENT_END, LineType.PREPROCESSOR):
- continue
- for m in re.finditer(r'\b0[xX][0-9a-fA-F]+\b', dl.code):
- lit = m.group(0)
- if any(c.isupper() for c in lit[2:]) or lit[1] == 'X':
- yield (dl.lineno,
- 'hex literal %r must be lowercase' % lit)
+ yield from _check_hex_case(dl)
+ for cont in dl.continuations:
+ yield from _check_hex_case(cont)
def check_indent_consistent(ctx):
diff --git a/scripts/dtc/dt-style-selftest/bad/yaml-hex-case.yaml b/scripts/dtc/dt-style-selftest/bad/yaml-hex-case.yaml
index c55359a4ca68..b0b8683b883a 100644
--- a/scripts/dtc/dt-style-selftest/bad/yaml-hex-case.yaml
+++ b/scripts/dtc/dt-style-selftest/bad/yaml-hex-case.yaml
@@ -25,5 +25,8 @@ examples:
- |
foo@1000 {
compatible = "example,test-hex-case";
- reg = <0xABCD 0x100>;
+ reg = <0xABCD 0x100>,
+ <0x2BCD 0x100>,
+ <0x3BCD
+ 0x100>;
};
diff --git a/scripts/dtc/dt-style-selftest/expected/yaml-hex-case.yaml.txt b/scripts/dtc/dt-style-selftest/expected/yaml-hex-case.yaml.txt
index 6600f7cd1ba5..f42490256939 100644
--- a/scripts/dtc/dt-style-selftest/expected/yaml-hex-case.yaml.txt
+++ b/scripts/dtc/dt-style-selftest/expected/yaml-hex-case.yaml.txt
@@ -1,2 +1,4 @@
# mode=strict
bad/yaml-hex-case.yaml:28: example 0 [hex-case] hex literal '0xABCD' must be lowercase
+bad/yaml-hex-case.yaml:29: example 0 [hex-case] hex literal '0x2BCD' must be lowercase
+bad/yaml-hex-case.yaml:30: example 0 [hex-case] hex literal '0x3BCD' must be lowercase
--
2.53.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v2 2/6] dtc: dt-check-style: Handle continued lines in check_line_length()
2026-09-09 8:35 [PATCH v2 0/6] dtc: dt-check-style: Improvements for handling continued lines Krzysztof Kozlowski
2026-09-09 8:35 ` [PATCH v2 1/6] dtc: dt-check-style: Handle continued lines in check_hex_case() Krzysztof Kozlowski
@ 2026-09-09 8:35 ` Krzysztof Kozlowski
2026-09-09 8:35 ` [PATCH v2 3/6] dtc: dt-check-style: Handle continued lines in check_trailing_whitespace() Krzysztof Kozlowski
` (3 subsequent siblings)
5 siblings, 0 replies; 9+ messages in thread
From: Krzysztof Kozlowski @ 2026-09-09 8:35 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Saravana Kannan
Cc: devicetree, linux-kernel, Krzysztof Kozlowski
Continued lines are not separate DtsLine items in ctx.lines, so they
need own iteration. Rule for length of line is applicable to continued
values as well.
Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
---
scripts/dtc/dt-check-style | 18 ++++++++++++------
scripts/dtc/dt-style-selftest/bad/dts-line-length.dts | 3 ++-
.../dtc/dt-style-selftest/bad/yaml-line-length.yaml | 3 ++-
.../dt-style-selftest/expected/dts-line-length.dts.txt | 1 +
.../expected/yaml-line-length.yaml.txt | 1 +
5 files changed, 18 insertions(+), 8 deletions(-)
diff --git a/scripts/dtc/dt-check-style b/scripts/dtc/dt-check-style
index 6d978c4d9832..ff5e715593df 100755
--- a/scripts/dtc/dt-check-style
+++ b/scripts/dtc/dt-check-style
@@ -627,16 +627,22 @@ def check_indent_unit_strict(ctx):
'got %r' % unit)
+def _check_line_length(dl):
+ if dl.linetype == LineType.BLANK:
+ return
+ cols = _display_col(dl.raw)
+ if cols > 80:
+ yield (dl.lineno,
+ 'line exceeds 80 columns (%d)' % cols)
+
+
def check_line_length(ctx):
"""Lines must not exceed 80 columns; tabs count as 8 (see
_display_col)."""
for dl in ctx.lines:
- if dl.linetype == LineType.BLANK:
- continue
- cols = _display_col(dl.raw)
- if cols > 80:
- yield (dl.lineno,
- 'line exceeds 80 columns (%d)' % cols)
+ yield from _check_line_length(dl)
+ for cont in dl.continuations:
+ yield from _check_line_length(cont)
def check_mixed_indent_chars(ctx):
diff --git a/scripts/dtc/dt-style-selftest/bad/dts-line-length.dts b/scripts/dtc/dt-style-selftest/bad/dts-line-length.dts
index bde91a922477..adf40e3c95f7 100644
--- a/scripts/dtc/dt-style-selftest/bad/dts-line-length.dts
+++ b/scripts/dtc/dt-style-selftest/bad/dts-line-length.dts
@@ -14,7 +14,8 @@ soc@0 {
#size-cells = <1>;
foo@1000 {
- compatible = "example,test-line-length-this-is-a-very-long-name-indeed-yeah";
+ compatible = "example,test-line-length-this-is-a-very-long-name-indeed-yeah",
+ "example,test-line-length-this-is-a-very-long-name-indeed-yeah-second";
reg = <0x1000 0x100>;
};
};
diff --git a/scripts/dtc/dt-style-selftest/bad/yaml-line-length.yaml b/scripts/dtc/dt-style-selftest/bad/yaml-line-length.yaml
index 6e4140e500b5..6b1209ee4f26 100644
--- a/scripts/dtc/dt-style-selftest/bad/yaml-line-length.yaml
+++ b/scripts/dtc/dt-style-selftest/bad/yaml-line-length.yaml
@@ -24,6 +24,7 @@ additionalProperties: false
examples:
- |
foo@1000 {
- compatible = "example,test-line-length-this-is-a-very-long-name-indeed-yeah";
+ compatible = "example,test-line-length-this-is-a-very-long-name-indeed-yeah",
+ "example,test-line-length-this-is-a-very-long-name-indeed-yeah-second";
reg = <0x1000 0x100>;
};
diff --git a/scripts/dtc/dt-style-selftest/expected/dts-line-length.dts.txt b/scripts/dtc/dt-style-selftest/expected/dts-line-length.dts.txt
index 8ed08c309632..9cdb7550b56c 100644
--- a/scripts/dtc/dt-style-selftest/expected/dts-line-length.dts.txt
+++ b/scripts/dtc/dt-style-selftest/expected/dts-line-length.dts.txt
@@ -1,2 +1,3 @@
# mode=stricter
bad/dts-line-length.dts:17: [line-length-dts] line exceeds 80 columns (101)
+bad/dts-line-length.dts:18: [line-length-dts] line exceeds 80 columns (108)
diff --git a/scripts/dtc/dt-style-selftest/expected/yaml-line-length.yaml.txt b/scripts/dtc/dt-style-selftest/expected/yaml-line-length.yaml.txt
index 89b36360caa4..f21b823c6136 100644
--- a/scripts/dtc/dt-style-selftest/expected/yaml-line-length.yaml.txt
+++ b/scripts/dtc/dt-style-selftest/expected/yaml-line-length.yaml.txt
@@ -1,2 +1,3 @@
# mode=strict
bad/yaml-line-length.yaml:27: example 0 [line-length] line exceeds 80 columns (81)
+bad/yaml-line-length.yaml:28: example 0 [line-length] line exceeds 80 columns (88)
--
2.53.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v2 3/6] dtc: dt-check-style: Handle continued lines in check_trailing_whitespace()
2026-09-09 8:35 [PATCH v2 0/6] dtc: dt-check-style: Improvements for handling continued lines Krzysztof Kozlowski
2026-09-09 8:35 ` [PATCH v2 1/6] dtc: dt-check-style: Handle continued lines in check_hex_case() Krzysztof Kozlowski
2026-09-09 8:35 ` [PATCH v2 2/6] dtc: dt-check-style: Handle continued lines in check_line_length() Krzysztof Kozlowski
@ 2026-09-09 8:35 ` Krzysztof Kozlowski
2026-09-09 8:35 ` [PATCH v2 4/6] dtc: dt-check-style: Unduplicate checks in check_mixed_indent_chars() Krzysztof Kozlowski
` (2 subsequent siblings)
5 siblings, 0 replies; 9+ messages in thread
From: Krzysztof Kozlowski @ 2026-09-09 8:35 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Saravana Kannan
Cc: devicetree, linux-kernel, Krzysztof Kozlowski
Continued lines are not separate DtsLine items in ctx.lines, so they
need own iteration. Rule for trailing white-space is applicable to
continued values as well.
Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
---
scripts/dtc/dt-check-style | 10 ++++++++--
scripts/dtc/dt-style-selftest/bad/dts-trailing-ws.dts | 8 ++++++++
scripts/dtc/dt-style-selftest/bad/yaml-trailing-ws.yaml | 5 ++++-
scripts/dtc/dt-style-selftest/expected/dts-trailing-ws.dts.txt | 1 +
.../dtc/dt-style-selftest/expected/yaml-trailing-ws.yaml.txt | 2 ++
5 files changed, 23 insertions(+), 3 deletions(-)
diff --git a/scripts/dtc/dt-check-style b/scripts/dtc/dt-check-style
index ff5e715593df..3694b0b1ebb6 100755
--- a/scripts/dtc/dt-check-style
+++ b/scripts/dtc/dt-check-style
@@ -985,10 +985,16 @@ def check_tab_in_yaml_example(ctx):
yield (cont.lineno, 'tab character not allowed in DTS example')
+def _check_trailing_whitespace(dl):
+ if dl.raw != dl.raw.rstrip():
+ yield (dl.lineno, 'trailing whitespace')
+
+
def check_trailing_whitespace(ctx):
for dl in ctx.lines:
- if dl.raw != dl.raw.rstrip():
- yield (dl.lineno, 'trailing whitespace')
+ yield from _check_trailing_whitespace(dl)
+ for cont in dl.continuations:
+ yield from _check_trailing_whitespace(cont)
def check_unclosed_block_comment(ctx):
diff --git a/scripts/dtc/dt-style-selftest/bad/dts-trailing-ws.dts b/scripts/dtc/dt-style-selftest/bad/dts-trailing-ws.dts
index 1eb24d91c640..73c24525ce18 100644
--- a/scripts/dtc/dt-style-selftest/bad/dts-trailing-ws.dts
+++ b/scripts/dtc/dt-style-selftest/bad/dts-trailing-ws.dts
@@ -5,4 +5,12 @@ / {
compatible = "example,test-board";
#address-cells = <1>;
#size-cells = <1>;
+
+ interrupt-controller@10000 {
+ compatible = "example,intc";
+ reg = <0x10000 0x1000>;
+ clocks = <1 2 3>,
+ <4 5 6>,
+ <7 8 9>;
+ };
};
diff --git a/scripts/dtc/dt-style-selftest/bad/yaml-trailing-ws.yaml b/scripts/dtc/dt-style-selftest/bad/yaml-trailing-ws.yaml
index f338c14174e6..17eeed3411c6 100644
--- a/scripts/dtc/dt-style-selftest/bad/yaml-trailing-ws.yaml
+++ b/scripts/dtc/dt-style-selftest/bad/yaml-trailing-ws.yaml
@@ -25,5 +25,8 @@ examples:
- |
device@1000 {
compatible = "example,test-trailing";
- reg = <0x1000 0x100>;
+ reg = <0x1000 0x100>,
+ <0x2000 0x100>,
+ <0x3000
+ 0x100>;
};
diff --git a/scripts/dtc/dt-style-selftest/expected/dts-trailing-ws.dts.txt b/scripts/dtc/dt-style-selftest/expected/dts-trailing-ws.dts.txt
index 94d9ae9d616c..a15a7d637c30 100644
--- a/scripts/dtc/dt-style-selftest/expected/dts-trailing-ws.dts.txt
+++ b/scripts/dtc/dt-style-selftest/expected/dts-trailing-ws.dts.txt
@@ -1,2 +1,3 @@
# mode=relaxed
bad/dts-trailing-ws.dts:5: [trailing-whitespace] trailing whitespace
+bad/dts-trailing-ws.dts:13: [trailing-whitespace] trailing whitespace
diff --git a/scripts/dtc/dt-style-selftest/expected/yaml-trailing-ws.yaml.txt b/scripts/dtc/dt-style-selftest/expected/yaml-trailing-ws.yaml.txt
index cfdbc8476c73..4f2ec9572bc6 100644
--- a/scripts/dtc/dt-style-selftest/expected/yaml-trailing-ws.yaml.txt
+++ b/scripts/dtc/dt-style-selftest/expected/yaml-trailing-ws.yaml.txt
@@ -1,2 +1,4 @@
# mode=relaxed
bad/yaml-trailing-ws.yaml:27: example 0 [trailing-whitespace] trailing whitespace
+bad/yaml-trailing-ws.yaml:29: example 0 [trailing-whitespace] trailing whitespace
+bad/yaml-trailing-ws.yaml:30: example 0 [trailing-whitespace] trailing whitespace
--
2.53.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v2 4/6] dtc: dt-check-style: Unduplicate checks in check_mixed_indent_chars()
2026-09-09 8:35 [PATCH v2 0/6] dtc: dt-check-style: Improvements for handling continued lines Krzysztof Kozlowski
` (2 preceding siblings ...)
2026-09-09 8:35 ` [PATCH v2 3/6] dtc: dt-check-style: Handle continued lines in check_trailing_whitespace() Krzysztof Kozlowski
@ 2026-09-09 8:35 ` Krzysztof Kozlowski
2026-09-09 8:46 ` sashiko-bot
2026-09-09 8:35 ` [PATCH v2 5/6] dtc: dt-check-style: Right strip whitespaces, leftovers before comments Krzysztof Kozlowski
2026-09-09 8:35 ` [PATCH v2 6/6] dtc: dt-check-style: Properly detect comments in multi-line properties Krzysztof Kozlowski
5 siblings, 1 reply; 9+ messages in thread
From: Krzysztof Kozlowski @ 2026-09-09 8:35 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Saravana Kannan
Cc: devicetree, linux-kernel, Krzysztof Kozlowski
Code checking each DtsLine and continuations is the same, so split it to
separate function to avoid duplicated code.
Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
---
scripts/dtc/dt-check-style | 29 +++++++++++++----------------
1 file changed, 13 insertions(+), 16 deletions(-)
diff --git a/scripts/dtc/dt-check-style b/scripts/dtc/dt-check-style
index 3694b0b1ebb6..2ff9fdc50367 100755
--- a/scripts/dtc/dt-check-style
+++ b/scripts/dtc/dt-check-style
@@ -645,27 +645,24 @@ def check_line_length(ctx):
yield from _check_line_length(cont)
+def _check_mixed_indent_chars(dl):
+ if not dl.indent_str:
+ return
+ if dl.linetype == LineType.PREPROCESSOR:
+ return
+ if re.search(r' \t', dl.indent_str):
+ yield (dl.lineno, 'mixed tabs and spaces in indent')
+ if dl.indent_str.count(' ') > 7:
+ yield (dl.lineno, 'too many space characters in indent (more than 7)')
+
+
def check_mixed_indent_chars(ctx):
"""Indent must be all-tabs, except for aligning indentation (comments
or continued lines)."""
for dl in ctx.lines:
- if not dl.indent_str:
- continue
- if dl.linetype == LineType.PREPROCESSOR:
- continue
- if re.search(r' \t', dl.indent_str):
- yield (dl.lineno, 'mixed tabs and spaces in indent')
- if dl.indent_str.count(' ') > 7:
- yield (dl.lineno, 'too many space characters in indent (more than 7)')
+ yield from _check_mixed_indent_chars(dl)
for cont in dl.continuations:
- if not cont.indent_str:
- continue
- if cont.linetype == LineType.PREPROCESSOR:
- continue
- if re.search(r' \t', cont.indent_str):
- yield (cont.lineno, 'mixed tabs and spaces in indent')
- if cont.indent_str.count(' ') > 7:
- yield (cont.lineno, 'too many space characters in indent (more than 7)')
+ yield from _check_mixed_indent_chars(cont)
def check_node_close_alone(ctx):
--
2.53.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v2 5/6] dtc: dt-check-style: Right strip whitespaces, leftovers before comments
2026-09-09 8:35 [PATCH v2 0/6] dtc: dt-check-style: Improvements for handling continued lines Krzysztof Kozlowski
` (3 preceding siblings ...)
2026-09-09 8:35 ` [PATCH v2 4/6] dtc: dt-check-style: Unduplicate checks in check_mixed_indent_chars() Krzysztof Kozlowski
@ 2026-09-09 8:35 ` Krzysztof Kozlowski
2026-09-09 8:35 ` [PATCH v2 6/6] dtc: dt-check-style: Properly detect comments in multi-line properties Krzysztof Kozlowski
5 siblings, 0 replies; 9+ messages in thread
From: Krzysztof Kozlowski @ 2026-09-09 8:35 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Saravana Kannan
Cc: devicetree, linux-kernel, Krzysztof Kozlowski
Stripping a comment from a line to get the code leads trailing
whitespace (e.g. in a line like "enable-active-high; /* comment */")
which will break DtsLine.code.endswith() checks.
Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
---
scripts/dtc/dt-check-style | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/scripts/dtc/dt-check-style b/scripts/dtc/dt-check-style
index 2ff9fdc50367..b10e30f9d5b9 100755
--- a/scripts/dtc/dt-check-style
+++ b/scripts/dtc/dt-check-style
@@ -91,7 +91,8 @@ class DtsLine:
self.indent_str = indent_str # leading whitespace as-is
self.depth = depth
self.stripped = stripped # Code without indentation
- self.code = _strip_strings_and_comments(stripped) # Only the code, skipping trailing comments
+ # Only the code, skipping trailing comments and space between code and trailing comment
+ self.code = _strip_strings_and_comments(stripped).rstrip()
self.is_root = is_root
self.prop_name = None
self.continuations = []
--
2.53.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v2 6/6] dtc: dt-check-style: Properly detect comments in multi-line properties
2026-09-09 8:35 [PATCH v2 0/6] dtc: dt-check-style: Improvements for handling continued lines Krzysztof Kozlowski
` (4 preceding siblings ...)
2026-09-09 8:35 ` [PATCH v2 5/6] dtc: dt-check-style: Right strip whitespaces, leftovers before comments Krzysztof Kozlowski
@ 2026-09-09 8:35 ` Krzysztof Kozlowski
5 siblings, 0 replies; 9+ messages in thread
From: Krzysztof Kozlowski @ 2026-09-09 8:35 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Saravana Kannan
Cc: devicetree, linux-kernel, Krzysztof Kozlowski
Code classifying given line exits on first condition match, thus a line
consisting only of a comment in a continued (multi-line) property, like:
interrupts = <GIC_SPI 100 IRQ_TYPE_LEVEL_HIGH>,
/* Performance counter interrupts */
<GIC_SPI 101 IRQ_TYPE_LEVEL_HIGH>;
was treated as a comment-line line, not as continuation, leading to
false positive warnings of invalid indentation:
arch/arm64/boot/dts/tesla/fsd.dtsi:456: [indent-consistent] indent mismatch (expected depth 3 * '\t')
This needs two related fixes:
1. Move the judgment as a LineType.CONTINUATION earlier before one
classifying as a comment
2. Check the comment-stripped DtsLine.code, not DtsLine.stripped, to
verify if it is a continuation.
Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
---
scripts/dtc/dt-check-style | 19 ++++++++++---------
scripts/dtc/dt-style-selftest/bad/dts-cont-align.dts | 1 +
.../dtc/dt-style-selftest/bad/yaml-cont-align.yaml | 1 +
.../dt-style-selftest/expected/dts-cont-align.dts.txt | 11 ++++++-----
.../expected/yaml-cont-align.yaml.txt | 3 ++-
scripts/dtc/dt-style-selftest/good/dts-cont-align.dts | 1 +
.../dtc/dt-style-selftest/good/yaml-cont-align.yaml | 1 +
7 files changed, 22 insertions(+), 15 deletions(-)
diff --git a/scripts/dtc/dt-check-style b/scripts/dtc/dt-check-style
index b10e30f9d5b9..9fcb2eeaf7fe 100755
--- a/scripts/dtc/dt-check-style
+++ b/scripts/dtc/dt-check-style
@@ -202,6 +202,14 @@ def classify_lines(text):
if opens_block:
in_block_comment = True
+ if not prev_complete:
+ dl = DtsLine(i, raw, LineType.CONTINUATION, depth, indent_str, code)
+ out.append(dl)
+ prev_complete = (code.endswith(';') or
+ code.endswith('{') or
+ code.endswith('};'))
+ continue
+
# Pure-comment line: nothing left after stripping. Classify as
# COMMENT_START (carries to next line) or COMMENT, and skip the
# structural classification entirely.
@@ -211,14 +219,6 @@ def classify_lines(text):
out.append(dl)
continue
- if not prev_complete:
- dl = DtsLine(i, raw, LineType.CONTINUATION, depth, indent_str, code)
- out.append(dl)
- prev_complete = (code.endswith(';') or
- code.endswith('{') or
- code.endswith('};'))
- continue
-
# NODE_CLOSE: the canonical form is "}" or "};" alone. A line
# that is nothing but closures (e.g. "}; };") is still treated
# as NODE_CLOSE for depth tracking, but the multi-closure case
@@ -545,7 +545,8 @@ def check_continuation_alignment(ctx):
'continuation should align to column %d '
'(%s)' % (target_col + target_offset + 1, err_msg_explanation))
# Align to the value within <> or "" of continuation (so the previous line)
- dl_value_complete = cont.stripped.endswith('",') or cont.stripped.endswith('>,')
+ if len(cont.code):
+ dl_value_complete = cont.code.endswith('",') or cont.code.endswith('>,')
def _check_hex_case(dl):
diff --git a/scripts/dtc/dt-style-selftest/bad/dts-cont-align.dts b/scripts/dtc/dt-style-selftest/bad/dts-cont-align.dts
index 5390ebbf4059..91a74887c774 100644
--- a/scripts/dtc/dt-style-selftest/bad/dts-cont-align.dts
+++ b/scripts/dtc/dt-style-selftest/bad/dts-cont-align.dts
@@ -11,6 +11,7 @@ interrupt-controller@10000 {
reg = <0x10000 0x1000>;
clocks = <1 2 3>, /* comments with " < , should not matter */
<4 5 6>,
+ /* but comments should be placed properly */
<7 8 9>;
interrupts = <1 2 3>, /* comments with " < , should not ... */
<4 5 6>,
diff --git a/scripts/dtc/dt-style-selftest/bad/yaml-cont-align.yaml b/scripts/dtc/dt-style-selftest/bad/yaml-cont-align.yaml
index a5a9eb17fc17..0189b654a5b0 100644
--- a/scripts/dtc/dt-style-selftest/bad/yaml-cont-align.yaml
+++ b/scripts/dtc/dt-style-selftest/bad/yaml-cont-align.yaml
@@ -27,6 +27,7 @@ examples:
compatible = "example,test-cont-align";
reg = <0x1000 0x100>, /* comments with " < , should not matter */
<0x2000 0x100>, /* comments with " < , should not matter */
+ /* but comments should be placed properly */
<0x3000
0x100>;
};
diff --git a/scripts/dtc/dt-style-selftest/expected/dts-cont-align.dts.txt b/scripts/dtc/dt-style-selftest/expected/dts-cont-align.dts.txt
index a7ed62677a2b..fd7f389d6cce 100644
--- a/scripts/dtc/dt-style-selftest/expected/dts-cont-align.dts.txt
+++ b/scripts/dtc/dt-style-selftest/expected/dts-cont-align.dts.txt
@@ -1,10 +1,11 @@
# mode=strict
bad/dts-cont-align.dts:13: [continuation-alignment] continuation should align to column 26 (to < or ")
bad/dts-cont-align.dts:14: [continuation-alignment] continuation should align to column 26 (to < or ")
-bad/dts-cont-align.dts:16: [continuation-alignment] continuation should align to column 30 (to < or ")
+bad/dts-cont-align.dts:15: [continuation-alignment] continuation should align to column 26 (to < or ")
bad/dts-cont-align.dts:17: [continuation-alignment] continuation should align to column 30 (to < or ")
-bad/dts-cont-align.dts:19: [continuation-alignment] continuation should align to column 27 (to the value under <)
-bad/dts-cont-align.dts:20: [continuation-alignment] continuation should align to column 26 (to < or ")
-bad/dts-cont-align.dts:21: [continuation-alignment] continuation should align to column 27 (to the value under <)
-bad/dts-cont-align.dts:23: [continuation-alignment] continuation should align to column 38 (to < or ")
+bad/dts-cont-align.dts:18: [continuation-alignment] continuation should align to column 30 (to < or ")
+bad/dts-cont-align.dts:20: [continuation-alignment] continuation should align to column 27 (to the value under <)
+bad/dts-cont-align.dts:21: [continuation-alignment] continuation should align to column 26 (to < or ")
+bad/dts-cont-align.dts:22: [continuation-alignment] continuation should align to column 27 (to the value under <)
bad/dts-cont-align.dts:24: [continuation-alignment] continuation should align to column 38 (to < or ")
+bad/dts-cont-align.dts:25: [continuation-alignment] continuation should align to column 38 (to < or ")
diff --git a/scripts/dtc/dt-style-selftest/expected/yaml-cont-align.yaml.txt b/scripts/dtc/dt-style-selftest/expected/yaml-cont-align.yaml.txt
index eb9a84d5c222..9e98c28867aa 100644
--- a/scripts/dtc/dt-style-selftest/expected/yaml-cont-align.yaml.txt
+++ b/scripts/dtc/dt-style-selftest/expected/yaml-cont-align.yaml.txt
@@ -1,3 +1,4 @@
# mode=strict
bad/yaml-cont-align.yaml:29: example 0 [continuation-alignment] continuation should align to column 11 (to < or ")
-bad/yaml-cont-align.yaml:31: example 0 [continuation-alignment] continuation should align to column 12 (to the value under <)
+bad/yaml-cont-align.yaml:30: example 0 [continuation-alignment] continuation should align to column 11 (to < or ")
+bad/yaml-cont-align.yaml:32: example 0 [continuation-alignment] continuation should align to column 12 (to the value under <)
diff --git a/scripts/dtc/dt-style-selftest/good/dts-cont-align.dts b/scripts/dtc/dt-style-selftest/good/dts-cont-align.dts
index b52ee6cccd8c..e6450a1d8209 100644
--- a/scripts/dtc/dt-style-selftest/good/dts-cont-align.dts
+++ b/scripts/dtc/dt-style-selftest/good/dts-cont-align.dts
@@ -17,6 +17,7 @@ interrupt-controller@10000 {
reg = <0x10000 0x1000>;
interrupts = <1 2 3>, /* comments with " < , should not ... */
<4 5 6>,
+ /* but comments should be placed properly */
<7 8 9>;
pinmux = <0x01
0x02>,
diff --git a/scripts/dtc/dt-style-selftest/good/yaml-cont-align.yaml b/scripts/dtc/dt-style-selftest/good/yaml-cont-align.yaml
index 8463075f9f4c..4a5b5ad43ee8 100644
--- a/scripts/dtc/dt-style-selftest/good/yaml-cont-align.yaml
+++ b/scripts/dtc/dt-style-selftest/good/yaml-cont-align.yaml
@@ -27,6 +27,7 @@ examples:
compatible = "example,test-cont-align";
reg = <0x1000 0x100>,
<0x2000 0x100>,
+ /* but comments should be placed properly */
<0x3000
0x100>;
};
--
2.53.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH v2 4/6] dtc: dt-check-style: Unduplicate checks in check_mixed_indent_chars()
2026-09-09 8:35 ` [PATCH v2 4/6] dtc: dt-check-style: Unduplicate checks in check_mixed_indent_chars() Krzysztof Kozlowski
@ 2026-09-09 8:46 ` sashiko-bot
2026-09-09 9:57 ` Krzysztof Kozlowski
0 siblings, 1 reply; 9+ messages in thread
From: sashiko-bot @ 2026-09-09 8:46 UTC (permalink / raw)
To: Krzysztof Kozlowski; +Cc: devicetree, robh, conor+dt
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] Undocumented behavioral change in loop refactoring expands indentation checks to continuation lines of unindented properties.
--
commit 89ba14f0783d8be45f1d6722eb8a627b6c4b34e4
Author: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
dtc: dt-check-style: Unduplicate checks in check_mixed_indent_chars()
This commit splits the indentation checking logic into a separate
_check_mixed_indent_chars() helper function. The goal is to avoid
duplicating code when checking both primary lines and continuation lines.
> diff --git a/scripts/dtc/dt-check-style b/scripts/dtc/dt-check-style
> index 4ac10cb450684..41c97d996882f 100755
> --- a/scripts/dtc/dt-check-style
> +++ b/scripts/dtc/dt-check-style
[ ... ]
> def check_mixed_indent_chars(ctx):
> """Indent must be all-tabs, except for aligning indentation (comments
> or continued lines)."""
> for dl in ctx.lines:
> - if not dl.indent_str:
> - continue
> - if dl.linetype == LineType.PREPROCESSOR:
> - continue
> - if re.search(r' \t', dl.indent_str):
> - yield (dl.lineno, 'mixed tabs and spaces in indent')
> - if dl.indent_str.count(' ') > 7:
> - yield (dl.lineno, 'too many space characters in indent (more than 7)')
> + yield from _check_mixed_indent_chars(dl)
> for cont in dl.continuations:
[Severity: Medium]
Does this unintentionally alter the script's behavior for unindented
properties with multi-line continuations?
Previously, if a line lacked indentation, the outer loop would hit a continue
statement, entirely skipping the evaluation of dl.continuations for that line.
With the new _check_mixed_indent_chars() helper, an early return inside the
helper simply finishes checking the primary line, but execution then proceeds
to evaluate dl.continuations in the outer loop anyway. While scanning these
continuation lines might be desirable, it silently expands the style checker's
scope in a commit presented as a pure functional no-op.
> - if not cont.indent_str:
> - continue
> - if cont.linetype == LineType.PREPROCESSOR:
> - continue
> - if re.search(r' \t', cont.indent_str):
> - yield (cont.lineno, 'mixed tabs and spaces in indent')
> - if cont.indent_str.count(' ') > 7:
> - yield (cont.lineno, 'too many space characters in indent (more than 7)')
> + yield from _check_mixed_indent_chars(cont)
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260909-b4-dts-style-checker-continued-lines-v2-0-c5cb4c9d9b66@oss.qualcomm.com?part=4
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v2 4/6] dtc: dt-check-style: Unduplicate checks in check_mixed_indent_chars()
2026-09-09 8:46 ` sashiko-bot
@ 2026-09-09 9:57 ` Krzysztof Kozlowski
0 siblings, 0 replies; 9+ messages in thread
From: Krzysztof Kozlowski @ 2026-09-09 9:57 UTC (permalink / raw)
To: sashiko-reviews; +Cc: devicetree, robh, conor+dt
On 09/09/2026 10:46, sashiko-bot@kernel.org wrote:
> Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
> - [Medium] Undocumented behavioral change in loop refactoring expands indentation checks to continuation lines of unindented properties.
Ack, that's desired, but commit msg should be explicit about this.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2026-09-09 9:57 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-09 8:35 [PATCH v2 0/6] dtc: dt-check-style: Improvements for handling continued lines Krzysztof Kozlowski
2026-09-09 8:35 ` [PATCH v2 1/6] dtc: dt-check-style: Handle continued lines in check_hex_case() Krzysztof Kozlowski
2026-09-09 8:35 ` [PATCH v2 2/6] dtc: dt-check-style: Handle continued lines in check_line_length() Krzysztof Kozlowski
2026-09-09 8:35 ` [PATCH v2 3/6] dtc: dt-check-style: Handle continued lines in check_trailing_whitespace() Krzysztof Kozlowski
2026-09-09 8:35 ` [PATCH v2 4/6] dtc: dt-check-style: Unduplicate checks in check_mixed_indent_chars() Krzysztof Kozlowski
2026-09-09 8:46 ` sashiko-bot
2026-09-09 9:57 ` Krzysztof Kozlowski
2026-09-09 8:35 ` [PATCH v2 5/6] dtc: dt-check-style: Right strip whitespaces, leftovers before comments Krzysztof Kozlowski
2026-09-09 8:35 ` [PATCH v2 6/6] dtc: dt-check-style: Properly detect comments in multi-line properties Krzysztof Kozlowski
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.