[트러블슈팅] IntelliJ에서 import문에 대한 규칙이 적용되지 않는 이슈

김태훈·2023년 10월 4일
0

문제

IntelliJ가 import문에 대한 checkstyle 규칙을 무시하는 이슈

문제 상황

협업을 진행하며, 코드 일관성을 유지하기 위해 Naver Coding Convention을 사용하기로 합니다. 그런데 IntelliJ에서 import 문에 대해 자기 멋대로 정렬을 하는 이슈가 발생했습니다.

Naver Coding Convention에서는 java, javax, org, ... 순서로 import문을 정렬하자고 규칙을 정해뒀습니다.
그런데 자동정렬(cmd + opt + o)을 수행하면 해당 순서를 무시하고 알파벳 순서로 정렬되는 걸 확인할 수 있었습니다. 아래 이미지는 IntelliJ가 자기 멋대로 정렬을 수행하고, checkstyle은 정렬이 잘못되었다고 오류를 뱉는 상황입니다.

checkstyle에 맞춰 수동으로 정렬을 하고 cmd + opt + o 를 누르면 다시 알파벳 순서로 정렬이 되는 무한루프에 빠져버렸습니다.

인텔리제이와 체크스타일 자존심 강한 두 천재의 대결

저는 다음과 같은 순서로 IntelliJ를 설정했습니다.

  1. checkstyle.xml 다운로드
  2. Preference - Tools - Checkstyle에서 체크스타일 적용
  3. Preference - Editor - Code Style - Java에서 Project에 스키마 적용

3번을 적용하면 IntelliJ의 정렬 규칙이 변경되어야 합니다. 실제로 다른 설정들은 잘 변경되었는데, Import 문만 적용이 되지 않았습니다.

해결 방법

Preference - Editor - Code Style - Java - Import에 들어오면 가장 하단에 Import Layout이라는 화면이 보입니다. 해당 화면의 값을 보면 import java..*, import javax.. 이런 값들이 들어가 있습니다.

이 값을 import java.*, import javax. 이렇게 변경해주면 문제가 해결됩니다.

고찰

아래는 Import문에 관련한 Naver Conding Convention의 Checkstyle Rule입니다.
해당 부분에는 문법적인 오류가 없습니다.

		<!-- [import-grouping] -->
		<module name="ImportOrder">
			<property name="groups" value="java., javax., org., net., /com\.(?!nhncorp|navercorp|naver)/, /(?!java\.|javax\.|com\.|org\.|net\.)/, com.nhncorp., com.navercorp., com.naver."/>
            ... 이하 생략 ...
		</module>

아마 Checkstyle configuration을 사용해 IntelliJ에 스키마를 적용하는 과정에서 IntelliJ 측에서 버그가 발생한 것 같습니다.

IntelliJ 측에 오류를 보고하면서 해당 이슈를 마무리하겠습니다.


해당 부분은 Checkstyle 외부 플러그인이었네요. IntelliJ의 실수가 아니었습니다.
저는 Editor 탭의 하단에서 관리하길래 IntelliJ에서 관리하는 영역인지 알았는데, Checkstyle 플러그인을 설치하지 않은 사용자에게는 Import Schema 하단에 Checkstyle Configuration이 없네요. 추후 Checkstyle에 이슈 리포트를 하겠습니다.

profile
작은 지식 모아모아

0개의 댓글