diff --git a/blink/internal/fixer/rules/class_definition.go b/blink/internal/fixer/rules/class_definition.go index 881e7b12ca..351f0db95d 100644 --- a/blink/internal/fixer/rules/class_definition.go +++ b/blink/internal/fixer/rules/class_definition.go @@ -77,6 +77,12 @@ func (f ClassDefinition) Fix(s *tokens.Stream) bool { } continue } + // a genuine declaration is followed by the type name; a class-like keyword + // followed by "::" or "(" (e.g. "Enum::MODE_ADD") is a name the lexer tagged + // as a keyword, not a declaration + if n := nextSignificantIndex(s, i); n < 0 || s.At(n).Kind != token.Ident { + continue + } if normalizeHeaderSpacing(s, i) { changed = true } diff --git a/blink/internal/fixer/rules/class_definition_config_test.go b/blink/internal/fixer/rules/class_definition_config_test.go index d325ac7225..4f9e95725c 100644 --- a/blink/internal/fixer/rules/class_definition_config_test.go +++ b/blink/internal/fixer/rules/class_definition_config_test.go @@ -19,6 +19,21 @@ func TestClassDefinitionSingleLine(t *testing.T) { } } +// A class-name reference the lexer tags as a class-like keyword (here "Enum" in +// "Enum::MODE_ADD") is not a declaration, so single_line must not flatten the code +// that follows it. +func TestClassDefinitionIgnoresKeywordNamedReference(t *testing.T) { + t.Parallel() + src := "