These release notes list all enhancements of ABAP cleaner (added rules, configuration, menus etc.) as well as bugfixes of reported issues, i.e. anything that enhances or changes the behavior of ABAP cleaner.
For a complete list of changes (including documentation, tests, refactoring etc.), please refer to the list of commits.
Great thanks to ConjuringCoffee for the issue behind the custom view and field names!
- Added new rule 'Standardize test classes for CDS views'
- Added new rule 'Use CamelCase in test class for CDS view'
- Enhanced rule 'Use CamelCase for known CDS names' for custom view and field names (#281)
- Enhanced rule 'Use CamelCase for known CDS names' with option to consider commented-out assignments
- Enhanced rule 'Shorten VALUE statements' with option to skip expressions with commented-out table rows
- Enhanced rule 'Align parameters and components' for parameters and host expressions in SELECT statements
- Enhanced DDL rule 'Align source parameters' for analytical queries
- Fixed DDL parser for multiple comments in one line
- Updated known CamelCase names for CDS views and fields
Thank you very much, Raukze, MDagni ConjuringCoffee and blackfish5, for inspiring these improvements and fixes!
- Fixed rule 'Remove space before commas and period' for auto-generated comment on FUNCTION (#348)
- Fixed rule 'Unchain into multiple statements' for asterisk comments after colon (#363)
- Fixed rule 'Remove needless parentheses' for asterisk comments after colon (#363)
- Fixed rule 'Rearrange local declarations' etc. for CONSTANTS used in TYPES (#350)
- Fixed rule 'Align METHODS ... FOR TESTING' for ABSTRACT methods (#354)
- Updated known CamelCase names for CDS views and fields
Great thanks to jrodriguez-rc for reporting this bug so quickly!
- Fixed Parser for identifiers with namespaces (#359)
Thanks a lot, MDagni for opening the issue that led to the bugfix!
- Enhanced parser, object model and UI for Data Definition Language (DDL) as used in CDS Views
- Added new DDL rule 'Standardize annotation layout'
- Added new DDL rule 'Rearrange annotations'
- Added new DDL rule 'Break before DEFINE etc.'
- Added new DDL rule 'Break before AS SELECT etc.'
- Added new DDL rule 'Break before JOINs'
- Added new DDL rule 'Break before ASSOCIATIONs'
- Added new DDL rule 'Break before select list braces'
- Added new DDL rule 'Break before WHERE clause etc.'
- Added new DDL rule 'Standardize spaces around colon, comma etc.'
- Added new DDL rule 'Standardize spaces around brackets'
- Added new DDL rule 'Use CamelCase for known entity and field names'
- Added new DDL rule 'Correct frequent typos in DDL comments'
- Added new DDL rule 'Align view parameters'
- Added new DDL rule 'Align source parameters'
- Added new DDL rule 'Align function parameters after =>'
- Added new DDL rule 'Align logical expressions in views'
- Added new DDL rule 'Align name list and GROUP BY list'
- Added new DDL rule 'Align JOINs and ASSOCIATIONs'
- Added new DDL rule 'Align select list'
- Added new DDL rule 'Standardize empty lines between sections'
- Added new DDL rule 'Standardize empty lines within sections'
- Profiles editor: Made height of rule references section flexible
- Fixed rule 'Make implicit type explicit' for constant used as length in parentheses (#350)
- Updated known CamelCase names for CDS views and fields
Great thanks to suynwa for the bug report behind this fix!
- Fixed local blocking of rule in Rules Used list for manual selection of cleanup range from ADT
- Updated images with ADT-style color profile
Great thanks to vonglan, Ennowulff, JoachimEck, apanys, MichiFr, cawoodmonads, ConjuringCoffee and openPhiL for inspiring these improvements and fixes!
- Added menu "View / Use ADT-Style Colors" to select between ADT-style and classic color profile for diff view (#282)
- Added labels "Before cleanup" and "After cleanup" to diff view (#249)
- Enhanced rule 'Align parameters and components' for group key in LOOP AT ... GROUP BY (#330)
- Enhanced rule 'Use string templates to assemble text' with option for lines without operands (#323)
- Enhanced 'Use assert class instead of ASSERT' with explanation in examples (#314)
- Fixed rule 'Replace TRANSLATE with string functions' for unknown, potentially structured types (#318)
- Fixed rule 'Align declarations' for comment line and line-start comma (#335)
- Fixed rule 'Delete unused variables' for obsolete REPLACE ... INTO (#331)
- Fixed rule 'Align SELECT ... FROM ... JOIN' for ON ... JOIN (#332)
- Updated ABAP grammar file
- Updated known CamelCase names for CDS views and fields
Thanks a lot, agoeb and matthewdjb for the bug reports behind these improvements!
- Raised minimum required versions to Java 17 and ABAP Development Tools 3.38 / Eclipse 2023-06
- Fixed rule 'Remove needless CLEAR' for multiple commands on same line (#315)
- Removed duplicate resource files from JAR file (#325)
- Updated known CamelCase names for CDS views and fields
Many thanks to hansdampfinger666 and fmabap for your contributions and ideas that led to these improvements!
- Fixed rule 'Indent lines' for PrettyPrinter indentation of INCLUDE (#278)
- Fixed rule 'Use string templates to assemble text' for concatenation operators at line end (#306)
- Updated known CamelCase names for CDS views and fields
Thanks a lot to xkollar2, phenschke and mraht for the issues behind these improvements!
- Fixed parser for CLASS: ... DEFINITION DEFERRED chains (#294)
- Fixed rule 'Use FINAL for immutable variables' for ASSIGN COMPONENT ... OF STRUCTURE (#297)
- Fixed rule 'Replace TRANSLATE with string functions' etc. for placeholders in macro definitions (#298)
- Fixed rule 'Align declarations' for TYPES at the end of an INCLUDE TYPE line
- Fixed rule 'Align parameters and components' for assignments after BASE
- Updated known CamelCase names for CDS views and fields
Many thanks to HuprichT, mraht and ConjuringCoffee for all your ideas!
- Changed Cleanup Settings (last profile, cleanup range, syntax restriction) to be workspace-specific (#211)
- Renamed rule 'Prefer =, <>, <= etc. to EQ, NE, LE etc.' to 'Use consistent set of comparison operators' (#273)
- Enhanced rule 'Use consistent set of comparison operators' with option for preferred set (#273)
- Enhanced rule 'Use consistent set of comparison operators' with replacement of obsolete operators (#283)
- Enhanced rule 'Delete unused variables' with option to add ##NEEDED in case of MESSAGE ... INTO (#275)
- Enhanced rule 'Delete unused variables' for MESSAGE INTO with upfront declaration (#285)
- Updated ABAP grammar file
- Updated known CamelCase names for CDS views and fields
Thank you very much jelliottp, BenjaminWeisheit and cyb3rko for your contributions, ideas and bug reports that led to these improvements!
- Added new rule 'Use CamelCase for known CDS names'
- Added new rule 'Use string templates to assemble text' (#116)
- Added new rule 'Replace CONDENSE with string function' (#36)
- Fixed rule 'Report unused parameters' for CALL TRANSFORMATION ... RESULT (#267)
Many thanks to jelliottp for inspiring these improvements!
- Added new rule 'Replace READ TABLE with table expression' (#36)
- Added new rule 'Replace DESCRIBE TABLE ... LINES with lines( )' (#36)
- Added further references to Code Pal for ABAP
- Updated link to webinar on Open Source journey of ABAP cleaner
- Fixed rule 'Shorten VALUE statements' for comment line at end of parenthesis
Thanks a lot to JoachimEck, Falcon7EH and VladGhitulescu for the bug reports behind these fixes!
- Enhanced rule 'Delete unused variables' to clean up obsolete comments (#257)
- Fixed rule 'Rearrange local declarations' for MODULE ... ENDMODULE (#258)
- Fixed rule 'Align SELECT lists' for line breaks with inline declarations (#251)
- Fixed rule 'Indent lines' for multiple commands on same line (#248)
Many thanks to flying-crane, owelzel, ConjuringCoffee, I034943, xczar0, fmabap, this-yash and mraht for your contributions, ideas and bug reports that led to these improvements!
- Enabled ABAP cleaner menus for WebDynpro implementations (#220)
- Fixed rule 'Delete unused variables' etc. for dynamic ASSIGN (#237)
- Fixed rule 'Delete unused variables' for CONVERT DATE ... TIME ZONE (#243)
- Fixed rule 'Report unused parameters' for AMDP methods (#244)
- Fixed rule 'Align SELECT lists' for SELECT SINGLE FOR UPDATE * (#241)
- Fixed rule 'Align SELECT lists' for FIELDS with one CASE element (#229)
- Fixed rule 'Move pragmas to correct position' for moving multiple pragmas to line end (#228)
- Fixed rule 'Standardize empty lines within methods' for classes without methods (#225)
- Added grayed-out Install New Software menu to known installation issues (#235)
- Fixed partial recalculation after local blocking of rule
Thank you ConjuringCoffee, kjetil-kilhavn, this-yash, VladGhitulescu and stockbal for the ideas and bug reports behind these improvements!
- Added new rule 'Report unused parameters' (#224)
- Enhanced rule 'Align declarations' for enumerations (#194)
- Enhanced rule 'Align parameters and components' with option 'Keep other one-liners' (#170)
- Enhanced rule 'Align logical expressions' with examples for ABAP SQL (#215)
- Aligned order of OK and Cancel buttons with OS standards (#188)
- Added info message if profile is missing and fallback profile is used (#219)
- Added info message if higher technical version is required (#140)
- Fixed rule 'Shorten VALUE statements' for GROUP BY group_key (#226)
- Fixed rule 'Delete unused variables' for variable with same name as a method (#222)
- Fixed rule 'Align SELECT ... FROM ... JOIN' for JOIN without optional INNER (#221)
- Updated ABAP grammar file to latest version
Many thanks to christianguenter2, VladGhitulescu and bnichell for the ideas behind these new features and fixes!
- Added links to Open Source webinar recording and slides
- Added new rule 'Align SELECT clauses' (#6)
- Added new rule 'Align SELECT ... FROM ... JOIN' (#6)
- Added new rule 'Align SELECT lists' (#6)
- Enhanced rule 'Align logical expressions' with four options on 'SQL: Align AND / OR ...' (#193)
- Fixed rule 'Use FINAL for immutable variables' for CALL FUNCTION ... TABLES (#209)
Thank you very much fmabap, LechnerClemens and RicardoLadeiro for the bug reports behind these improvements!
- Fixed rule 'Unchain into multiple statements' for BEGIN OF ... END OF with ABAP Doc (#204)
- Fixed rule 'Delete unused variables' for variable names with special chars in non-OO contexts (#202)
- Fixed rule 'Delete unused variables' for pragmas at line start (#200)
Great thanks to VladGhitulescu and Koch013 for reporting the bugs behind this release!
- Fixed rule 'Align declarations' for mixed TYPE clauses with tables (#186)
- Fixed rule 'Rearrange local declarations' for multiple empty lines (#195)
- Fixed Profiles editor layout for long descriptions (#197)
Thanks a lot to jan-jezek, jelliottp and ConjuringCoffee for opening the issues that led to these new features!
- Added new rule 'Remove needless parentheses' (#105)
- Added new rule 'Standardize assertion parameter order' (#85)
- Enhanced rule 'Unchain into multiple statements' for TYPES: BEGIN OF and related table types (#94)
Thanks a lot, ConjuringCoffee, csopaki, fmabap and bnichell for the ideas behind these new features and fixes!
- Added new rule 'Align PERFORM parameters' (#83)
- Added new rule 'Align FORM declarations' (#84)
- Added command line option --CRLF, changed default line separator to LF (#177)
- Moved handling of spaces in empty brackets to rule 'Remove needless spaces' (#143)
- Enhanced rule 'Put spaces around text literals' (renamed) for keywords, operators and comments (#143)
- Enhanced rule 'Remove needless CLEAR' for CLEAR after BREAK-POINT and LOG-POINT
- Fixed rule 'Standardize CLASS ... DEFINITION' for dark theme (#179)
Great thanks to StefanRutzmoser, ConjuringCoffee, GKaschke, thorsten79G, m-badura and conlutio for their ideas and bug reports!
- Added new rule 'Standardize CLASS ... DEFINITION' (#157)
- Added new rule 'Remove needless CLEAR' (#61, #111)
- Added syntax check with RND Parser after cleanup
- Enhanced 8 rules in rule group 'COMMANDS' with 'unchain' option (#120)
- Fixed rule 'Replace CALL METHOD ...' for 'CALL METHOD OF ole' (#175)
- Fixed rule 'Replace CREATE OBJECT ...' for 'CREATE OBJECT ole class' (#175)
- Fixed rule 'Resolve equals sign chain ...' for implicit conversions (#173)
- Fixed rule 'Delete unused variables' for table expression after CLEAR (#169)
Great thanks to PilotFlying, fmabap, ConjuringCoffee, GKaschke, franzreitmayer, JoachimEck and MagneeR for opening the issues that led to these enhancements and fixes!
- Added Ctrl + click navigation from "Rules Used ..." list to rule configuration (#161)
- Added menus 'Code / From Clipboard' and 'Code / From File' in read-only preview (#155)
- Added documentation of limitation to non-functional changes (#158)
- Enhanced rule 'Align parameters and components' for RECEIVE RESULTS FROM FUNCTION (#166)
- Fixed read-only team folders for non-existing directories (#160)
- Fixed Parser for literals, host variables, and arithmetic expressions in SELECT (#165)
- Fixed Parser for UP TO ... ROWS in unusual position (#159)
- Fixed rule 'Align conditional expressions' for SWITCH one-liners (#156)
- Fixed rule 'Align parameters and components' for non-table-row one-liners (#153)
Thanks a lot, openPhiL, TMNielsenApS and ruhnla for your bug reports that led to these improvements!
- Fixed several issues with comments, pragmas and colons from stress test (#147)
- Fixed Parser for chain colon in CLASS: ... DEFINITION DEFERRED (#142)
- Fixed rule 'Align CLEAR:, FREE: and SORT' for SORT: chains (#141)
Many thanks to Lightirius for reporting this bug so quickly!
- Fixed missing custom profiles (#138)
Thank you very much blackfish5, bastianStr, Kronrir, JoachimRees, stockbal and ConjuringCoffee for your contributions, ideas and bug reports that led to these improvements!
- Added support for additional, synchronized, read-only team profile folders (#28)
- Profiles editor: Added context menu and shortcut to copy rule name and description to the clipboard (#130)
- Enhanced rule 'Convert CHECK outside loop ...' with option to 'Allow CHECK after ASSERT ...' (#135)
- Enhanced rule 'Standardize empty lines within methods' to allow setting 0 empty lines within methods (#131)
- Added documentation on how to synchronize team profiles (#28)
- Added documentation for GitHub Actions workflow usage (#127)
- Added info on code signing in installation instructions (#34)
- Added link to blog post on ABAP Tools for Clean ABAP
- Fixed rule 'Align declarations' for table types with complex key definitions (#129)
- Fixed Parser for SELECT with aggregate functions inside parentheses (#134)
- Fixed Parser to accept chain colon inside of brackets for chains of one (#133)
Great thanks to stockbal for the first Open-Source code contribution to ABAP cleaner!, as well as ZEAL-IT, oscardelama, b4loghpeter, DirkBor, m-badura and vonglan for their ideas and bug reports!
- Added new command line options for cleaning multiple files from one
--sourcedir
(#118) - Added menu item to 'Show Read-Only Preview With ABAP Cleaner...' without locking (#114)
- Added documentation on why ABAP cleaner has no pragmas and pseudo-comments (#121)
- Added info on ABAP release of current system in window title of interactive UI
- Fixed command line cleanup adding LF at end of file (#124)
- Fixed rule 'Replace obsolete MOVE ... TO with =' for chains of one and late chains (#120)
- Fixed rule 'Replace CREATE OBJECT with NEW constructor' to require ABAP release 7.40 (#119)
- Fixed rule 'Use FINAL for immutable variables' for MODIFY ENTITY with fields tables (#117)
- Fixed parser for escape char ! with composed identifiers (#115)
Thanks a lot, bnichell for reporting the bug behind this release!
- Added link to the recording of the Devtoberfest session in README chapter 'Demo'
- Fixed rule 'Use FINAL for immutable variables' for assignments to table expressions (#112)
Thank you MDagni, suynwa, AlexMFrank, FirdousP and ConjuringCoffee for the issues behind these improvements!
- Fixed rule 'Standardize empty lines within methods' for function modules (#106)
- Changed rule 'Add missing parameters to ABAP Doc' to not create ABAP Doc lines for test method exceptions (#103)
- Updated ABAP grammar file to fix capitalization of CORRESPONDING ... MAPPING ... DEFAULT (#102)
- Added hint on restriction of rule 'Align declarations', option 'Maximum line length' (#100)
- Improved parser error message for chain colon inside parentheses (#91)
- Improved documentation for cleanup range 'Current class' (#62)
Many thanks to suynwa, ConjuringCoffee, jan-jezek, AlexMFrank and cgrail for the reporting the bugs behind these fixes!
- Fixed rule 'Indent lines' for WITH ... ENDWITH loops (#98)
- Fixed rule 'Use FINAL for immutable variables' for method calls inside of constructors expressions (#96)
- Fixed rule 'Convert upper and lower case' for text symbol IDs with letters (#95)
- Fixed parser for CLASS inside of macros (#93)
- Fixed rule 'Convert upper and lower case', option 'Auto-determine ...: derive from first ...' for implementation sections (#92)
Thanks a lot to openPhiL, thebestabapdeveloper and ConjuringCoffee for the bug reports behind these fixes!
- Fixed rule 'Make implicit type explicit' for obsolete DATA ... OCCURS (#89)
- Fixed rule 'Move AND/OR etc. from line end to next line start' for comments at line end (#88)
- Fixed rule 'Delete unused variables' to skip methods with test seams or test injection (#87)
- Changed default configuration of rule 'Standardize spaces next to parentheses', option 'Add space in condensed cases ...' (now active by default)
Great thanks to alexlukas and ConjuringCoffee for their ideas and bug reports!
- Enhanced online documentation with screenshots
- Enhanced rule 'Align declarations' with option for 'Maximum line length' (#77)
- Enhanced rule 'Align parameters and components' with documentation for option 'Maximum line length B' (#81)
- Fixed rule 'Align parameters and components' for table expressions chained with
][
(#75) - Fixed parser for
ULINE AT /pos(len)
(#80)
Many thanks to se38, ConjuringCoffee and richardbruenning for the ideas and bug reports behind these improvements!
- Added new rule 'Remove end-of comments' (#60)
- Fixed rules 'Convert CHECK in/outside loop' for SELECT...ENDSELECT (#71)
- Fixed rule 'Align parameters and components' for row with structure variable (#70)
- Added "not reachable" to known installation issues (#69)
Thank you jelliottp, ConjuringCoffee and zmsMarc for opening the issues behind these improvements!
- Enhanced rule 'Align parameters and components' for one-liners behind the call (#66)
- Fixed rule 'Align parameters and components' to keep pseudo comments at line end (#65)
- Fixed rule 'Rearrange local declarations' for LIKE across different declaration keywords (#64)
- Fixed rule 'Delete unused variables' to remove TODO comments from line end (#58)
Great thanks to ConjuringCoffee, fabianlupa, jelliottp and bjoern-jueliger-sap for all your ideas!
- Main window: Added option for 'Default cleanup range' to enable cleanup of entire code document (#42)
- Enhanced rule 'Align declarations' with options 'Action for chains' etc. and 'Condense inner spaces' (#35)
- Enhanced rule 'Align parameters and components' with option to 'Align assignments across rows ...' (#54)
- Enhanced rule 'Align parameters and components' for RAISE ... MESSAGE ... EXPORTING (#16)
- Enhanced rule 'Align logical expressions' for alignment of FOR ... IN ... WHERE ( ... ) (#29)
- Enhanced rule 'Move AND/OR etc. from line end to next line start' with option to 'Move keywords' (#29)
- Enhanced rule 'Remove the self-reference me->' to consider local interfaces and aliases (#41)
- Enhanced rule 'Use assert class instead of ASSERT' with descriptions and example implementation
- Fixed rule 'Align parameters and components' for line starts left of the assignment operator in nested cases (#53)
- Fixed rule 'Delete unused variables' options wording, replacing 'measure' with 'action' (#52)
- Fixed background color of options in Profiles editor for dark theme (#47)
Many thanks to jelliottp, ConjuringCoffee, GPR8, JanisBur and thebestabapdeveloper for inspiring these improvements and fixes!
- Added new rule 'Add missing parameters to ABAP Doc' (#24)
- Enhanced rule 'Standardize spaces next to parentheses' with option to 'Add space between parentheses and character literals' (#20)
- Enhanced rule 'Standardize escaping of !parameters' with option 'only to avoid syntax errors' (#31)
- Enhanced rule 'Replace obsolete MOVE ... TO with =' with option to 'Process MOVE: chains' (#32)
- Enhanced rule 'Delete unused variables' with example for ##NEEDED pragma (#38)
- Profiles editor: In rule descriptions, moved of conditions and restrictions to second line
- Profiles editor: Enhanced 'Save Profiles and Exit' to overwrite changed profiles only (#28)
- Profiles editor: Fixed partly hidden buttons in 'Profile name:' input box (#40)
- Fixed rule 'Delete unused variables' and 'Use FINAL for immutable variables' for macro usage (#43)
- Documentation: Added solution to installation issue 'No updates found' (#39)
Many thanks to ConjuringCoffee and SmogulT for opening the issues that led to these improvements!
- Enabled (de)activation of option 'Highlight text and line changes' on main window (#25)
- Fixed number of lines shown on option 'Highlight inner space changes' on main window (#25)
- Fixed rule 'Align keywords with second word of first line' for CALL TRANSFORMATION (#22)
- Fixed cleanup for systems with unknown ABAP release (#21)
Many thanks to fabianlupa for opening the issues that led to these enhancements and fixes!
- Enhanced rule 'Align declarations' with option on 'Alignment of nested structures' (#9, #14)
- Enhanced rule 'Unchain into multiple statements' with option to 'Unchain declarations in interfaces' (#12)
- Fixed rule 'Align METHODS declarations' for mixed chains of one-liners and multi-liners (#13)
- Fixed rule 'Delete unused variables' for variable usage in INSERT ... FROM TABLE
- Fixed rule 'Use FINAL for immutable variables' for changes with PERFORM ... USING
- Fixed rule 'Replace obsolete pseudo comments with pragmas' for multiple consecutive pseudo comments
- Added new rule 'Align CLEAR:, FREE: and SORT'
- Fixed rule 'Rearrange local declarations' for LIKE referring to a variable that is declared inline
- Fixed rule 'Delete unused variables' for declarations in macros
- Fixed rule 'Align parameters and components' for functional calls after INSERT LINES OF
- Fixed rule 'Align METHODS ... FOR TESTING' for line breaks without subsequent space
- Fixed rule 'Align logical expressions' for AND/OR in own line
- Fixed rule 'Delete unused variables' for variable usage with LIKE TABLE OF etc.
- This is the initial Open Source release, offering 57 cleanup rules with a total of 162 configuration options!
Continue reading: Available cleanup rules