MPS 2023.2의 새로운 기능

MPS 2023.2는 BaseLanguage 람다 생성, JUnit 5 지원, 타입 시스템 추론 규칙 재정의 등의 개선 사항을 제공합니다.

JUnit 5 지원

JUnit 5

MPS의 테스트가 이제 JUnit 5 테스트로 생성됩니다. JUnit 4에 대한 지원은 제한적으로 계속 제공됩니다.

  • 어노테이션이 적절하게 추가된 Java 클래스를 테스트로서 실행할 수 있습니다.
  • MPS 테스트 실행을 위한 두 가지 옵션(진행 중 및 생성)을 모두 사용할 수 있습니다.
  • 기존 테스트 루트는 JUP Jupiter API 어노테이션을 사용하여 생성됩니다.
    • BTestCase
    • NodeTestCase
    • EditorTestCase
    • MigrationTestCase
    • PatternTest
    • GeneratorTest

JUnit 5를 사용하여 모듈 테스트를 시작하기 위한 Ant 작업

다음 요소가 지원되어 새로운 launchtests Ant 작업을 사용할 수 있습니다.

  • 라이브러리
  • macro
  • 플러그인
  • testmodules

이 작업은 JUnit 3을 제외한 모든 테스트 아티팩트의 실행을 지원하며 테스트 구성 빌드 부분의 새로운 타깃 역할을 합니다.

MPS에서 테스트 실행

  • 어노테이션이 적절하게 추가된 모든 Java 클래스를 테스트로서 실행할 수 있습니다.
  • 이제 JUnit 4에 제한적인 지원만 제공됩니다.
  • 진행 중 및 생성 실행이 모두 가능합니다.

테스트 플랫폼 API

이 API를 사용하면 MPS에서 사용할 수 있는 테스트 유형을 확장할 수 있을 뿐만 아니라 테스트 세션에 대한 리스너를 구현할 수도 있습니다.

jetbrains.mps.baseLanguage.unitTest.platform의 클래스가 MPS 테스트 플랫폼 API를 구성합니다.

TestPlatform MPS 테스트 플랫폼에 대한 API를 정의합니다.
TestDescriptor MPS 테스트 플랫폼의 단일 테스트를 나타냅니다.
TestSource SNode와 같은 테스트 소스를 나타냅니다.
TestSession 테스트 세션을 나타냅니다.
TestDiscoveryParticipant 테스트 검색 프로세스에 연결할 수 있습니다.
TestSessionListener 테스트 세션에서 알림을 받을 수 있습니다.

맞춤형 테스트 엔진에 대한 실험적 지원

JUnit 5에는 무엇보다도 맞춤형 엔진으로 실행되는 테스트 구현에 대한 지원이 도입되었습니다. 이러한 엔진 중 하나로 프로퍼티 기반 테스트 프레임워크인 jqwik가 잘 알려져 있습니다.

타입 시스템 규칙 재정의에 대한 지원 강화
고객 후원

TS 재정의

최근에는 타입 시스템 규칙이 상위 개념에 정의된 규칙을 재정의할 수 있도록 하는 기능을 추가했습니다. 하위 개념이 상위 개념을 포함하는 언어를 확장하는 언어로 정의되는 경우에 이러한 재정의가 가능합니다. 이 기능은 Inference(추론) 규칙에 지원됩니다.

BaseLanguage 개선 사항

이전 업데이트에서 MPS는 메서드 참조 및 Java 람다로의 클로저 변환에 대한 지원이 향상되었습니다. 수많은 세부적 기능과 버그 수정을 통해 이 지원을 확대했습니다.

람다

클로저가 람다로 생성

컬렉션 연산에 사용되는 클로저가 이제 Java 람다로서 생성됩니다. 처음에는 Java 인터페이스를 사용하는 일반 함수 호출에만 이를 사용할 수 있었습니다. 이전 버전과의 호환성을 유지하기 위해, 다음과 같이 클로저가 여전히 익명 클래스로 생성되는 경우가 있습니다.

  • 변수 이름이 외부 변수와 충돌하는 경우(이제 이름을 바꾸라는 경고가 표시됨)
  • 타깃 Java 버전이 8 이하인 경우
  • 원시 타입이 사용되는 경우(Java 람다에서는 제대로 작동하지 않음)

일반적으로 이렇게 생성된 코드는 품질이 향상됩니다. 람다는 가독성이 높을 뿐 아니라 잘못 생성될 가능성이 적기 때문입니다. 한편, Java에서는 탐지하기 어려워 허용되지 않는 원시 타입을 이용한 기능이 MPS에서는 허용됩니다. 결과적으로, 원시 타입이 사용되는 위치에서는 생성이 실패할 수 있습니다.

클로저 매개변수

클로저 매개변수

이전에는 클로저 매개변수의 형식이 ~param, <type>param, param, var param 등 다양한 형태였습니다. 따라서 타입을 건너뛰면서 매개변수를 추가하기가 번거로웠습니다. 이번 릴리스에서는 현재 기본적으로 삽입되는 단순한 타입 미지정 매개변수를 위해 ~param 형식을 더 이상 사용하지 않습니다. 또한 함수 호출에 클로저가 삽입되면 필요한 함수 타입으로부터 디폴트 매개변수가 삽입됩니다. 마지막으로, 소스 코드에서 매개변수의 타입이 생략된 경우, 생성된 매개변수는 이제 타입을 생략하므로 컴파일링 품질이 더욱 향상됩니다.

스트림

스트림 상호 운용성

시퀀스는 MPS에서 광범위하게 사용되지만 Java 스트림도 사용해야 하는 경우가 있습니다. 이 업데이트는 Stream API가 사용할 수 있는 복잡한 메서드와 관련된 타입 시스템 문제를 완화하기 위해 향상된 추론을 제공합니다. 스트림과 시퀀스를 연결하기 위한 두 가지 연산을 추가했습니다.

  • <stream>.asSequence는 시퀀스를 스트림으로 변환합니다.
  • <sequence>.toStream(parallel=…)은 그 반대입니다.

이를 통해 사용할 API를 선택할 수 있을 뿐만 아니라 시퀀스의 이점(반복성)과 스트림의 이점(다양한 컬렉터, 더 많은 연산자)을 결합할 수 있습니다.

컬렉션 개선 사항

이전에 BaseLanguage 생성자에 대해 다이아몬드 연산자(new ArrayList<>())를 도입했지만 컬렉션 크리에이터는 이 개선에서 제외되었습니다. 이번 업데이트에서는 이제 새 컬렉션에서 타입 매개변수를 생략하여 코드 작성 프로세스를 단순화할 수 있습니다.

  • 초기 값에서 추론된 타입: var myList = new arraylist<> {myInitialValue}
  • 변수 선언에서 추론된 타입: map<int, string> myMap = new hashmap<>

또한 컬렉션의 가변성에 대한 지원도 향상되었습니다. 예를 들어, 더 이상 ? extends Number 표기를 대입할 수 없습니다. 그러나 타입 시스템은 이러한 제한된 타입이 유효한 경우 더 이상 사용을 거부하지 않습니다. sequence<> 타입은 해당 타입이 아닌 요소의 시퀀스에 삽입할 수 없기 때문에 안전하지 않은 결과를 초래하지 않으므로 기본적으로 공변성을 유지합니다. 이로 인해 이전에는 안전하지 않은 코드가 탐지되지 않았던 곳에서 새로운 타입 검사 문제가 발생할 수 있습니다. 이 문제는 제한된 타입 list<? extends node<>> 또는 시퀀스 타입 sequence<node<>>로 해결할 수 있습니다.

구성 설정

Make 비활성화

시작 시 Make 비활성화

Settings(설정) | Project Settings(프로젝트 설정) | Make에서 이용할 수 있는 새로운 옵션인 Disable Make On Startup(시작 시 Make 비활성화)을 추가했습니다. 이 옵션을 선택하면 시작할 때 MPS가 프로젝트의 모든 모듈을 만들지 않습니다. 이 기능은 초기 작성 프로세스가 너무 오래 걸리거나 프로젝트가 성공적으로 수행되기 전에 수동 구성이 필요하기 때문에 작성 프로세스가 실패할 가능성이 높은 상황에서 시작 속도를 높이려는 경우에 유용할 수 있습니다.

라이브러리 편집

모듈 Java 프로퍼티에서 라이브러리 및 소스 경로 편집

모듈 프로퍼티 대화상자의 Java 탭에 새로운 Edit(편집) 옵션이 추가되었습니다. 찾기는 어렵지만 매우 편리합니다. 모듈의 jar 라이브러리 세트를 변경해야 하는 경우 이 새로운 옵션을 사용하면 항목 제거 후 추가하는 일련의 지루한 작업을 수행할 필요가 없습니다.

기타

TODO 주석

사용자 지정 주석을 위한 TODO 기능

IGenericComment 개념을 확장하면 사용자 지정 언어로 주석을 나타내는 개념을 MPS의 TODO 기능에 적용할 수 있습니다. TODO를 나타내는 주석은 TODO Finder(TODO 파인더)에 의해 수집되고 TODO Viewer(TODO 뷰어)에 나열되며 커밋 과정에서 검사됩니다.

언어 측면: Create New(새로 만들기) 액션 관리

측면 모델에서 인스턴스를 생성하기 위해 MPS는 지금까지 이름이나 플래그별로 정렬된 루트화 가능한 비추상적 개념을 포함하는 일반 논리를 따랐습니다. 이제 측면 선언과 함께 선택적 구성을 지정할 수 있으므로 언어 디자이너가 사용자에게 표시되는 개념은 물론 이러한 개념의 그룹화와 순서도 제어할 수 있습니다.

“Please re-export dependency…”(종속성을 다시 내보내세요...) 검사 사용 중지

혼란을 일으키는 이 경고는 ClassConcept가 다른 모듈의 ClassConcept 사용을 확장하거나 노출할 때 표시되었습니다. 버전 2023.2 이전에는 MPS가 모듈 설명자에 지정된 모듈 종속성을 사용하여 종속성 그래프를 작성했습니다. 이제 MPS는 모델 변환과 관련된 실제 제너레이터와 언어를 기반으로 종속성 정보를 구성하므로 더 이상 이러한 종속성을 명시적으로 지정할 필요가 없습니다. 따라서 더 이상 이를 검사할 필요도 없습니다.

고객의 후원으로 이전 릴리스에서 가져온 기능

공유는 모든 커뮤니티가 가진 유익한 특성입니다. 다음 기능은 개발을 후원한 상용 MPS 사용자들의 요청을 바탕으로 구현되었습니다. 이제 이러한 편리한 추가 기능을 여러분도 모두 이용할 수 있습니다.

병렬 모델 검사기

모델 검사기는 이제 병렬 하드웨어를 효과적으로 활용하여 모델 검사의 처리 속도를 높일 수 있습니다. 이 프로세스를 시작하면 Settings(설정) | Tools(도구) | Model Checker(모델 검사기)의 설정에 따라 여러 스레드가 생성될 수 있습니다.

File-per-root 지속성 성능 개선

모델 데이터의 로딩 성능을 향상하기 위해 FilePerRootDataSource.getStreamByName() 메서드가 최적화되었습니다. File-per-root 지속성을 사용하여 다소 큰 모델을 저장하는 경우, 그 효과가 확실히 체감될 것입니다.

찾기 대화상자

Find text in project(프로젝트에서 텍스트 찾기) 지원 개선

기존 프로젝트에서 텍스트 찾기 액션이 개선되어, 명명된 노드의 참조도 검색하며 관련 결과를 추가적으로 표시합니다. 검색 대화상자에서 결과를 바로 볼 수 있는 미리보기 패널이 추가되었습니다. HTML 콘텐츠가 포함된 텍스트가 이제 결과에서 이전 버전처럼 HTML이 아닌 일반 텍스트로 렌더링됩니다.

Ant 작업에서 종속성 마이그레이션 건너뛰기

MPS에서 제공하는 Ant 작업을 사용하여 프로젝트를 마이그레이션하는 동안 종속성이 제대로 마이그레이션되지 않을 수 있습니다. 이러한 경우에도 프로젝트 마이그레이션을 계속할 수 있도록 플래그를 추가했습니다. 마이그레이션되지 않은 종속성이 발견되는 즉시 마이그레이션 프로세스를 중단하는 기본 동작은 그대로 유지됩니다. 이 플래그를 사용하려면 migrate Ant 작업에 haltOnDependencyError="false"를 추가하세요.

플랫폼 업데이트

전체 IDE 확대/축소

2023.2 버전부터 IDE 전체를 확대 및 축소하여 모든 UI 요소의 크기를 한 번에 늘리거나 줄일 수 있습니다. 메인 메뉴에서 View(보기) | Appearance(모양)를 선택하고 IDE의 배율을 조정하면 됩니다. 또한 Settings(설정)/Preferences(환경 설정) | Keymap(키맵) | Main Menu(메인 메뉴) | View(보기) | Appearance(모양)에서 해당 액션 호출을 위한 단축키를 사용자 지정할 수도 있습니다.

새로운 Remember size for each tool window(각 도구 창 크기 기억) 설정

MPS 2023.2에서 새로운 레이아웃 옵션을 통해 사이드 도구 창의 너비를 통일하거나 레이아웃을 사용자 지정하여 크기를 조정할 수 있습니다. 새로운 Remember size for each tool(각 도구 창의 크기 기억) 체크박스는 Settings/Preferences(설정/환경 설정)/Settings(설정) | Appearance & Behavior(모양 및 동작) | Appearance(모양) | Tool Windows(도구 창)에서 설정할 수 있습니다. 새로운 UI와 이전 UI에서 이 설정을 적용하는 방법은 이 블로그 글을 참조하세요.

검사 설명의 구문 강조 표시

검사 설명의 구문 강조 표시

Settings(설정)/Preferences(환경 설정) | Editor(에디터) | Inspections(검사)의 코드 샘플에 구문 강조 표시 기능이 추가되어 검사를 트리거한 부분을 더 쉽게 이해하고, 활성화 또는 비활성화 여부를 결정할 수 있습니다.

Markdown 파일의 단락 채우기

Markdown 파일의 Fill Paragraph(단락 채우기)

Fill Paragraph(단락 채우기) 에디터 액션이 Markdown 파일에 지원되므로 긴 텍스트를 균일한 길이의 여러 줄로 나눌 수 있습니다. 이 기능을 사용하려면 편집할 단락 내부에 캐럿을 놓고 Find Action(액션 찾기)(Ctrl+Shift+A)을 사용하여 Fill Paragraph(단락 채우기) 명령어를 검색하면 됩니다.

브랜치 팝업 개선

Branches(브랜치) 팝업 개선

Branches(브랜치) 팝업의 사용 편의성이 개선되었습니다. 브랜치는 그룹으로 설정되어 확장 가능한 목록에 저장되므로 브랜치 간 탐색이 더 간편해졌습니다.

새 브랜치 생성 팝업의 자동 완성

Create New Branch(새 브랜치 생성) 팝업의 자동 완성

MPS 2023.2 버전은 Create New Branch(새 브랜치 생성) 팝업에서 자동 완성 기능을 지원합니다. 새 브랜치 이름을 입력기 시작하면 IDE에서 기존 로컬 브랜치의 이름을 기반으로 적절한 접두사를 제안합니다.

마이그레이션 가이드

주요 릴리스가 나올 때마다 JetBrains는 이전 버전의 MPS에서 마이그레이션하기 위한 지침을 준비하여 모든 부분이 원활하게 진행되도록 보장합니다. 이러한 지침을 주의 깊게 살펴보세요.