fe-code-style

Installation
SKILL.md

What I do

Diagnose and fix Java code style issues in the FE module using the project's Checkstyle configuration.

When to use me

  • Before committing FE Java code changes
  • When FE build fails due to checkstyle violations
  • When you need to understand FE style rules

Procedure

Step 1: Run checkstyle

Checkstyle is integrated into the Maven build and runs automatically during mvn validate. To check style only (without full compilation):

cd fe && mvn checkstyle:check -pl fe-core

Or as part of the normal build:

./build.sh --fe -j${DORIS_PARALLELISM}

If checkstyle fails, the build will fail with error messages showing the file, line number, and rule violated.

Step 2: Interpret violations

Checkstyle output looks like:

[ERROR] src/main/java/.../Foo.java:[42:5] (imports) UnusedImports: Unused import - java.util.List.
[ERROR] src/main/java/.../Bar.java:[10] (header) RegexpHeader: Line does not match expected header line...

Each error shows: [file]:[line:col] (category) RuleName: description.

Step 3: Fix common violations

Violation Fix
RegexpHeader Add/fix Apache License header at file top
UnusedImports Remove unused import statements
LineLength (>120 chars) Break long lines
IllegalImport (shaded classes) Use the non-shaded equivalent (see import-control.xml)
FileTabCharacter Replace tabs with spaces
NewlineAtEndOfFile Ensure file ends with a newline
MergeConflictMarker Resolve git merge conflicts

Step 4: Verify fix

After fixing, re-run checkstyle to confirm:

cd fe && mvn checkstyle:check -pl fe-core

Key Configuration

File Purpose
fe/check/checkstyle/checkstyle.xml Main rules (license header, line length 120, encoding, imports)
fe/check/checkstyle/suppressions.xml Rule exclusions (test files, nereids, large files)
fe/check/checkstyle/import-control.xml Import restrictions (no shaded classes, no old logging APIs, no Lombok in nereids)
fe/check/checkstyle/checkstyle-apache-header.txt Apache License 2.0 header template
build-support/IntelliJ-code-format.xml IntelliJ formatter scheme (120 col, import organization)

Suppression Rules

Some files/packages have relaxed rules (see suppressions.xml):

  • Test files: Javadoc rules suppressed
  • Non-nereids code: Some strict rules suppressed
  • Specific large files: Individual suppressions

Excluded Code

The following are excluded from checkstyle (see fe/pom.xml):

  • **/apache/doris/thrift/**/* (generated Thrift code)
  • **/apache/parquet/**/* (generated Parquet code)

Import Restrictions (key rules from import-control.xml)

  • No shaded imports: Do not use org.apache.doris.thirdparty.* directly
  • No old logging: Do not use org.apache.commons.logging or java.util.logging
  • No SimpleDateFormat: Use java.time APIs instead
  • No Lombok in nereids: lombok is disallowed in org.apache.doris.nereids package

Troubleshooting

Problem Solution
Build fails on validate phase Run mvn checkstyle:check -pl fe-core to see specific violations
Can't find checkstyle config Ensure you're running from the fe/ directory
IntelliJ formatting differs Import build-support/IntelliJ-code-format.xml via Settings → Editor → Code Style
Related skills
Installs
2
Repository
apache/doris
GitHub Stars
15.3K
First Seen
10 days ago