🐧 Linux

Java 코딩 컨벤션을 위해 리눅스 명령어로 뜯어 고치기

loose 2023. 11. 27. 15:22
반응형

컬리 기술 블로그를 보고 적는 글에 추가로 오라클에서 제공하는 자바 코딩 컨벤션 일부를 적용한 리눅스 정규식 명령어를 정리해봤다.

정규식도 안쓰면 까먹을 지식이기 때문에 정규식 지식을 적어 놓은 글과 분리해서 실제 사용사례를 따로 적어보기로 했다.(물론 약간의 설명을 톡톡 첨가한..)

여러번 해보고 안건데 인텔리제이를 사용한다면 아래의 작업을 .editorconfig을 적용하고 reformat code를 돌리면 정규식 없이 해결할 수 있다.
대신 아래처럼 분류별로 문제마다 바꿀 수는 없고 한번에 바뀌니 유의해야 한다.(Commit 내용이 분별이 없어 상당히 더러워질 우려가 있다.)

그 외에 인텔리제이에서 추가적으로 Check Style이라는 Plugin도 있고 또 인텔리제이 자체적으로 코드에 대해 Inspect Code를 하면 좀 더 자세한 Warning이나 문제점들을 찾아주니 종종 확인하는 것이 좋다.

 

if, for문 등에 붙은 괄호에 공백 주기

if( 로 시작하는 문법을 if (로 바꿔준다.

KEYWORDS="(if|for|while|try)"
ag "$KEYWORDS\(" -l \
  | xargs sed -i ''  -E "s/$KEYWORDS\(/\1 (/"

 

더보기

s/old/new/ 형태로 수정한다.

KEYWORDS에서 ( )로 묶인것은 그룹화를 뜻하며 \1로 그룹화된 걸 그 다음 문맥에 사용할 수 있다.

 

\s* 공백 0개 이상

\s? 공백 0개 혹은 1회

\S 공백이 아닌 문자

-i ''  백업파일 생성하지 않고 파일을 수정하는 것을 말한다.

-E 확장정규표현식

 

괄호 시작, 종료 앞 뒤로 공백이 있는 경우 제거

ag "\( " -l | xargs sed -i '' -E "s/\( /\(/"
ag "([^ ]) \)" -l | xargs sed -i '' -E "s/([^ ]) \)/\1)/"


if ( test ) 를 if (test)로 바꿔준다.

람다식 변수 대문자로 시작하면 소문자로 변경

ag '\(([A-Z]\w*)\s?\-\>\s*\1' -l \
  | xargs gsed -i.orig -e '/\.filter/ s,(\([A-Z]\),(\L\1,; s,-> \([A-Z]\),-> \L\1,'
더보기

\(: 여는 괄호 (를 찾습니다.

([A-Z]\w*): 대문자로 시작하는 단어를 찾습니다.

\s?: 공백이 0 또는 1회 나올 수 있습니다.

\-\>: ->를 찾습니다.

\s*: 0 이상의 공백이 나올 수 있습니다.

\1: 앞서 찾은 대문자로 시작하는 단어와 동일한 것을 찾습니다.

s,(\([A-Z]\),(\L\1

(\([A-Z]\) 대문자를 (\L\1 소문자로 변경한다. 

\L: 이는 sed에서 사용되는 특별한 표현으로 뒤에 오는 문자열을 소문자로 변경합니다

람다식 화살표 앞뒤로 공백 없을 경우 추가

ag "([^ ])->" -l | xargs sed -i '' -E "s,([^ ])->,\\1 ->,
ag "\-\>([^ ])" -l | xargs sed -i '' -E "s,\-\>([^ ]),\-\> \1,"

 

탭문자 스페이스 2칸으로 변경

find . -name '*.java' | xargs ag '\t' -l | xargs sed -E -i '' "s/[[:cntrl:]]/  /g"

 

캐스팅을 하는 경우 앞에 공백 추가

ag "\)([a-zA-Z])" -l | xargs sed -i '' -E "s/\)([a-zA-z])/\) \1/"

 

캐스팅은 (String)test 가 아닌 (String) test로 한다.

 

메서드 혹은 생성자에서 "(" 전에 공백 제거.

 

사실 이 케이스는 별로 많지 않고 사내 프로젝트에서 수동으로 찾을만해서 간단하게 검색만해서 수동으로 찾았다.

ag "([a-zA-z]) \(([A-Z])"

public method test () 이런 케이스를 public method test()로 바꾼다.

 

+ 앞뒤로 공백 추가하기

ag "([^+])\+([^ ,+,=])" -l | xargs sed -i '' -E "s/([^+])\+([^ ,+,=])/\1 + \2/";

증감식인 경우는 제거 했으나 정규식에 들어간 +는 컨트롤 하기 좀 까다로워서 수정된 파일을 하나하나 봐야할 필요가 있다.

 

콤마 다음에 바로 문자가 오는 경우 제거하기

Map<String,Object> 이렇게 답답한 코드를 Map<String, Object>로 수정해준다.

ag ",([a-zA-z])" -l | xargs sed -i '' -E "s/,([a-zA-z])/, \1/"

 

728x90