Java Kotlin News Releases

Qodana 2022.3 EAP 출시: .NET 및 Go용 Qodana, 그리고 100개 이상의 새로운 검사

Read this post in other languages:
English, Français, 简体中文

Qodana 2022.3 EAP가 출시되었습니다. 이 버전의 플랫폼은 .NETGo에 대한 지원을 제공합니다. 또한 이미 지원되는 언어에 대해 100개 이상의 새로운 검사를 추가했습니다. 하지만 Qodana 2022.3 EAP는 아직 초기 단계이므로 Qodana 2022.2 이미지가 더 안정적입니다.

계속해서 이 게시물을 읽고 흥미로운 새 기능의 얼리 어답터가 되어보세요!


Qodana 시작하기

새로운 linter는 RiderGoLand의 모든 스마트한 기능을 제공하여 비정상적인 코드와 잠재적 버그를 발견하고, 불필요한 코드를 제거하고, 전체 코드 구조를 개선하고, 모든 .NET 및 Go 프로젝트에 대한 코딩 모범 사례를 도입할 수 있게 해줍니다!

Qodana for .NET

Qodana는 Rider에서 제공하는 거의 모든 .NET 검사를 지원합니다. 다 나열하기에는 너무 많으므로 Rider 문서를 확인하여 모든 검사에 대해 자세히 알아보세요. 여기서는 Qodana가 실행할 수 있는 .NET 검사의 예를 몇 가지 소개합니다.

일관성 없는 lock 요청

스레드 안전을 확보하기 위해 lock을 사용할 때의 주된 문제 중 하나는 교착 상태를 피하는 것입니다. 즉, 동시에 여러 스레드가 계속적인 실행을 서로 막으면서 진행이 이루어지지 않는 경우입니다. 이 새로운 검사를 통해 Qodana는 런타임 시 교착 상태를 유발할 수 있는 사이클을 강조 표시합니다.

수정된 캡처된 변수에 액세스

Qodana for .NET은 변수가 외부에서 수정되는 경우 익명 메서드에서 캡처된 변수에 대한 액세스를 감지합니다.

대리자가 ‘void’를 반환하는 경우 ‘async’ 람다 사용 배제

이 검사는 ‘async’ 람다 식의 사용 위치를 찾습니다. 람다가 처리하지 않은 예외는 호출자 스레드에 영향을 미치지 않으며 catch 절로 포착되지 않습니다.

타입 검사 및 형 변환의 병합 가능

기존 형식 (Expression is Type)의 타입 테스트 is 연산자는 Expression의 런타임 형식이 Type과 호환되고 Expression의 결과가 null이 아닌 경우에만 true를 반환합니다.

아래 예와 같이 형 변환 전에 호환성을 확인하기 위해 is를 사용하면 최소한 두 가지 문제가 발생합니다.

  • 이유 없이 타입 검사를 두 번 수행하게 되고, 이를 루프 내에서 수행하는 경우 성능에 영향을 미칠 수 있습니다.
  • objnull이면 프로그램 실행이 if 문으로 들어가지 않는다는 사실은 이 코드를 읽는 사람들에게 명확하지 않을 수 있습니다.

Qodana는 이 문제를 발견하고 Rider에서 바로 수정하도록 제안합니다.

람다 식/익명 메서드에는 포함하고 있는 컨텍스트의 캡처가 없어야 합니다.

‘[RequireStaticDelegate]’ 속성으로 어노테이션이 추가된 매개변수에 전달된 람다 식/익명 메서드에는 힙 할당을 피하기 위해 포함하고 있는 컨텍스트(로컬 변수, 로컬 함수, ‘이 내용’ 참조)의 캡처가 없어야 합니다.

.NET용 linter를 구성하고 분석을 실행하려면 Qodana 문서를 참조하세요.

Qodana for Go

Qodana 2022.3은 GoLand에서 제공하는 모든 검사를 지원하도록 설계되었습니다. 전체 목록을 보려면 GoLand 문서를 참조하세요. 다음은 현재 Qodana가 지원하는 Go 검사의 일부 예입니다.

자리 표시자 인수 ‘d.DeletedCount’에 잘못된 타입 ‘int64’ (%s)가 있습니다.

이 검사는 fmt.Printf, fmt.Println 및 유사한 서식 지정 및 출력 함수의 잘못된 사용을 보고합니다.

서식 지정 문자열에서 서식 지정 함수는 %s, %d, %v 등과 같은 서식 지정 동사를 사용합니다.

서식 지정 동사가 잘못 사용되면 서식 지정 함수의 결과에 오류가 포함됩니다.

처리되지 않은 오류

이 검사는 error 타입의 호출 결과를 처리하지 않는 함수 및 메서드에 대한 호출을 보고합니다.

이러한 함수의 API를 실행할 때는 성공적으로 완료되지 않고 오류를 반환할 가능성이 있습니다. 오류 결과를 처리하지 않는 호출은 API의 잘못된 사용을 나타낼 수 있습니다.

사용되지 않는 종속 요소

이 검사는 프로젝트에서 사용되지 않은 종속 요소를 보고합니다. 프로젝트의 라이브러리 크기를 줄이고 유지 관리를 더 편리하게 해주므로 사용하지 않는 종속 요소를 정기적으로 스캔하는 것이 좋습니다.

Qodana가 작동하는 모습을 보고 이러한 새로운 검사를 사용해 보려면 언제든지 문서로 이동하여 Go용 linter를 구성하는 방법을 살펴보세요.

새로운 검사 기능

새로운 .NET 및 Go용 linter를 추가한 외에도 Qodana 2022.3에는 기존 linter에 대한 100개 이상의 새로운 검사가 제공됩니다. Java, Kotlin 및 Python에 대한 검사 중 가장 주목할 만한 예를 살펴보겠습니다.

Java 및 Kotlin 검사

Qodana for JVM Community 및 Qodana for JVM에 40개 이상의 새로운 검사를 추가했습니다.

DataFlowIssue

이 검사는 데이터 흐름 분석을 기반으로 항상 null 값 가능성 계약을 위반하거나 예외가 발생할 수 있거나 중복되는 코드 구성을 보고합니다.

EscapedSpace

Java 15에는 텍스트 블록의 후행 공백이 표시되도록 하는 문자열 이스케이프 시퀀스 s가 도입되었습니다. 대부분의 다른 컨텍스트, 특히 정규식에서 이 이스케이프 시퀀스는 공백을 의미하는 정규식의 s와 쉽게 혼동될 수 있습니다. Java 문자열 리터럴에서는 대신 \s로 써야 합니다.

MismatchedJavadocCode

이 검사는 메서드가 문자열을 반환할 때 “returns true”라는 주석과 같이 메서드의 Javadoc이 메서드 서명과 명백하게 모순되는 경우를 보고합니다.

Destructure

이 검사는 구조가 분해될 수 있는 Kotlin의 선언을 보고합니다.

UnresolvedRestParam

이제 Qodana는 REST 서비스에서 일관성 없는 메서드 선언(예: @Get 어노테이션의 자리 표시자와 일치하지 않는 @PathParam 매개변수)을 감지할 수 있습니다. 이러한 선언은 런타임에 예외를 발생시킵니다. 

ReactiveStreamsThrowInOperator

이 새로운 검사는 지정된 오류 값을 반환하는 대신 Reactor/RxJava 연산자 코드에서 throw 문을 찾아 오류가 더 이상 처리되지 않도록 합니다. 예를 들어, 이러한 문을 무시하거나 대체 값으로 바꿉니다.

또한 이 버전의 Qodana는 IntelliJ IDEA 2022.3 및 Android Studio – Electric Eel | 2022.1.1에 도입된 Android의 모든 새로운 검사도 제공합니다.

Python 검사

또한 프로덕션 환경에서 오류가 발생하기 전에 문제를 강조 표시하는 Google App Engine의 몇 가지 검사를 Qodana for Python에 추가했습니다. 예를 들어 이제 다음을 찾아낼 수 있습니다.

  • Google App Engine 서버에서 허용된 쿼리에 대한 제한 사항을 준수하지 않는 GQL 쿼리
  • 인덱스가 없는 GQL 쿼리
  • Google App Engine 샌드박스에 의해 제한되는 Python 기능 사용
  • CGI 핸들러에서 Threadsafe가 활성화되지 않은 경우

디폴트 검사 프로파일을 사용자 지정하거나 완전히 새로운 프로파일을 생성하여 분석 시 특정 검사를 제외할 수 있습니다. 또한 코딩 가이드라인에 중요한 검사를 적용할 수도 있습니다. 자세한 정보는 Qodana 문서에서 확인하세요.

Qodana 2022.3 EAP에 대해 모두 알아보았습니다! 이번 새 릴리스가 여러분의 마음에 드시기를 바랍니다. 향후 블로그에 게시할 주제를 제안하거나 비즈니스에 Qodana를 활용할 방법을 알아보려면 이 게시물에 댓글을 남기거나, Twitter 또는 qodana-support@jetbrains.com으로 문의해 주세요.

코드를 깔끔하게 유지하면서, 즐겁게 개발하세요!

Qodana 팀

게시물 원문 작성자

Jessie Cho

Valerie Kuzmina

Discover more