Skip to content

Comments

Add new linter rules for formatting and fix many bugs#28410

Merged
jabraham17 merged 44 commits intochapel-lang:mainfrom
jabraham17:unattached-lint
Feb 19, 2026
Merged

Add new linter rules for formatting and fix many bugs#28410
jabraham17 merged 44 commits intochapel-lang:mainfrom
jabraham17:unattached-lint

Conversation

@jabraham17
Copy link
Member

@jabraham17 jabraham17 commented Feb 17, 2026

Adds 4 three linter rules for formatting and fixes many bugs in the parser and other linter rules

New linter rules

  • UnattachedElse: warn when else statements are not attached to their preceding curly brace
  • UnattachedCatch: warn when catch statements are not attached to their preceding curly brace
  • UnattachedCurly: warn when open curly brackets are not on the same line as the block header
  • ThenKeywordAndBlock: warn for extra then keyword. resolves [Feature Request]: lint rule for ThenKeywordAndBlock #24867

Bugs fixed

  • fixed several issues with IncorrectIndentation
  • fixed bad UnusedFormal warnings with interfaces
  • fixed the chplcheck test infrastructure not properly testing fixits (leading to many bug making it to main)
  • fixed/added curly bracket locations for many nodes
  • fixed manage statements having an extra scope creating Block AstNode
  • fixed header locations for parenless functions
  • fixed segfault unwrapping a null tryStmt.body( ) in chapel-py

Other improvements

  • improved chapel-py docs with method calls
  • added new chapel-py methods to support working with locations
  • added locations for then and else

Parser implementation notes: To make this work, I had to restructure how we parse curly braces locations. Previously, we just stored them in global state and then used them in a few select locations. For many AstNode types, this did not work. One reason is that in several places in the parser we create and destroy Block asts, and this could lose location information. Another reason is that for something like conditionals with multiple curly brace locations, only one of the blocks would get locations. To fix the issue, curly brace locations are stored per statement. We set the global state in block_stmt_body, and then immediately afterwards extract it to the per-statement variable. Future work could remove the global context state for curly braces entirely, but that was more work than I wanted to put into this for this PR.

Testing

  • paratest
  • start_test test/chplcheck

[Reviewed by @DanilaFe]

Signed-off-by: Jade Abraham <jade.abraham@hpe.com>
Signed-off-by: Jade Abraham <jade.abraham@hpe.com>
Signed-off-by: Jade Abraham <jade.abraham@hpe.com>
Signed-off-by: Jade Abraham <jade.abraham@hpe.com>
Signed-off-by: Jade Abraham <jade.abraham@hpe.com>
Signed-off-by: Jade Abraham <jade.abraham@hpe.com>
Signed-off-by: Jade Abraham <jade.abraham@hpe.com>
Signed-off-by: Jade Abraham <jade.abraham@hpe.com>
Signed-off-by: Jade Abraham <jade.abraham@hpe.com>
Signed-off-by: Jade Abraham <jade.abraham@hpe.com>
Signed-off-by: Jade Abraham <jade.abraham@hpe.com>
Signed-off-by: Jade Abraham <jade.abraham@hpe.com>
Signed-off-by: Jade Abraham <jade.abraham@hpe.com>
Signed-off-by: Jade Abraham <jade.abraham@hpe.com>
Signed-off-by: Jade Abraham <jade.abraham@hpe.com>
Signed-off-by: Jade Abraham <jade.abraham@hpe.com>
Signed-off-by: Jade Abraham <jade.abraham@hpe.com>
Signed-off-by: Jade Abraham <jade.abraham@hpe.com>
Signed-off-by: Jade Abraham <jade.abraham@hpe.com>
Signed-off-by: Jade Abraham <jade.abraham@hpe.com>
Signed-off-by: Jade Abraham <jade.abraham@hpe.com>
Signed-off-by: Jade Abraham <jade.abraham@hpe.com>
Signed-off-by: Jade Abraham <jade.abraham@hpe.com>
Signed-off-by: Jade Abraham <jade.abraham@hpe.com>
Signed-off-by: Jade Abraham <jade.abraham@hpe.com>
Signed-off-by: Jade Abraham <jade.abraham@hpe.com>
Signed-off-by: Jade Abraham <jade.abraham@hpe.com>
Signed-off-by: Jade Abraham <jade.abraham@hpe.com>
Signed-off-by: Jade Abraham <jade.abraham@hpe.com>
Signed-off-by: Jade Abraham <jade.abraham@hpe.com>
Signed-off-by: Jade Abraham <jade.abraham@hpe.com>
Signed-off-by: Jade Abraham <jade.abraham@hpe.com>
Signed-off-by: Jade Abraham <jade.abraham@hpe.com>
Signed-off-by: Jade Abraham <jade.abraham@hpe.com>
Signed-off-by: Jade Abraham <jade.abraham@hpe.com>
Signed-off-by: Jade Abraham <jade.abraham@hpe.com>
Signed-off-by: Jade Abraham <jade.abraham@hpe.com>
Signed-off-by: Jade Abraham <jade.abraham@hpe.com>
Signed-off-by: Jade Abraham <jade.abraham@hpe.com>
Signed-off-by: Jade Abraham <jade.abraham@hpe.com>
Signed-off-by: Jade Abraham <jade.abraham@hpe.com>
Signed-off-by: Jade Abraham <jade.abraham@hpe.com>
Signed-off-by: Jade Abraham <jade.abraham@hpe.com>
Signed-off-by: Jade Abraham <jade.abraham@hpe.com>
@jabraham17 jabraham17 merged commit 5cd30a1 into chapel-lang:main Feb 19, 2026
11 checks passed
@jabraham17 jabraham17 deleted the unattached-lint branch February 19, 2026 19:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature Request]: lint rule for ThenKeywordAndBlock

2 participants