MPS 2022.2의 새로운 기능

MPS 2022.2에는 검사 도구 주석, Kotlin 지원 개선, 향상된 SModel API 등 다양한 이점이 도입되었습니다.

검사 도구의 어노테이션

검사 도구의 어노테이션

이제 검사 도구 창에서 어노테이션에 액세스할 수 있으며 전체 루트에 대해 어노테이션 프로세스가 시작됩니다. 검사 도구 창의 왼쪽 경계를 마우스 오른쪽 버튼으로 클릭하여 이 작업에 액세스할 수 있습니다. 검사 도구 에디터와 기본 에디터 모두에서 어노테이션이 열립니다.

자세히 알아보기

MPS Kotlin에서 지원 개선

MPS Kotlin에서 지원 개선

타이핑 경험을 개선하기 위해 다음과 같은 많은 편집 문제가 수정되었습니다.

  • 더 많은 사용 사례(예: 사용자 지정 리시버 유형)를 지원하고 필터링(중복 감소, 숨겨진 기능에 대한 액세스)을 개선하기 위해 범위가 리팩터링되었습니다.
  • 유형 시스템별 연산자 분해 지원.
  • 숫자 리터럴: float 및 long을 더 쉬운 삽입, 부호 없는 숫자와 부호 있는 숫자 간의 전환.
  • 문자열 리터럴: 모든 문자열은 문자열 리터럴에서 Enter 키를 눌러 단일 행에서 다중 행으로 전환할 수 있습니다. 일부 삽입 문제가 수정되었습니다.
  • Kotlin 스텁은 리시버를 이용한 어노테이션 및 함수 유형의 로드를 지원합니다(예: (T) -> R로 잘못 로드된 T.() -> R).
  • 람다 리터럴:
    • 묵시적 it 매개변수 지원.
    • 유형에 리시버가 있는 람다(예: Receiver.() -> Unit)는 해당 리시버 유형을 람다 본문 내의 묵시적 this로 적절하게 사용합니다.

자세히 알아보기

MPS Kotlin용 SModel 언어

MPS Kotlin용 SModel 언어

이제 새로운 jetbrains.mps.kotlin.smodel 언어와 함께 MPS Kotlin에서 SModel 지원이 제공됩니다. 향상된 컴파일 지원과 함께, 이를 통해 언어 모듈(예: 헬퍼 클래스)에서 Kotlin 코드를 사용할 수 있습니다.

일반 유형(노드, 콘셉트, 링크 및 참조) 외에 MPS Kotlin의 향상된 유연성을 활용하여 콘셉트-유형 매개변수를 가져옵니다. 함수, 변수 및 클래스는 이제 이러한 매개변수를 선언 및 사용할 수 있으며 내부 유형에서 이를 재사용할 수 있으므로 입력이 더 쉽고 Kotlin의 스마트 캐스트를 활용할 수 있습니다.

Kotlin 컴파일 업데이트

Kotlin 컴파일 업데이트

Kotlin 컴파일 지원이 더 나은 지속성과 함께 개선되었습니다. 결과적으로, MPS가 다시 시작될 때 Kotlin 클래스가 더 이상 지워지지 않습니다.

Kotlin 컴파일러로 컴파일할 모듈을 표시하는 새로운 옵션이 빌드 스크립트에 추가되었습니다. 이 플래그는 수동으로 삽입됩니다. 현재 이 플래그를 true로 설정하는 데 사용할 수 있는 자동 검사는 없습니다. Kotlin 파일이 포함된 모듈이 JVM으로 컴파일될 때 플래그를 추가해야 합니다.

BaseLanguage 주석에서 사용 가능한 텍스트 스타일

BaseLanguage 주석에서 사용 가능한 텍스트 스타일

BaseLanguage에 주석을 추가할 때 이제 텍스트 스타일을 이용해 이를 추가로 사용자 지정할 수 있습니다. 주석은 굵게(Ctrl + B), 비이탤릭(Ctrl + I), 밑줄(Ctrl + U) 및 굵은 비이탤릭 스타일(Ctrl + B -> Ctrl + I)을 지원합니다.

사후 수정 변환

사후 수정 변환

BaseLanguage에서 이제 표현식에 일부 텍스트를 추가하여 코드를 변환할 수 있는 사후 수정 변환을 수행할 수 있습니다. 그러면 개발자가 변환을 적용하기 위해 식의 맨 앞으로 캐럿을 이동하거나 식을 선택할 필요가 없기 때문에 개발자의 시간이 절약됩니다.

SModel을 사용한 지연 모델 검색

MPS는 저장소에 등록된 순간 모델을 검색하는 데 사용되었습니다. 일반 프로젝트 모듈에서 모델을 발견한다는 것은 파일 시스템을 탐색하여 파일과 해당 유형을 찾고 최소한 모델에 대한 헤더 정보를 읽는 것을 의미했습니다.

이제 모델이 요청되지 않는 한 모듈이 모델 검색에 관여하지 않습니다. 새로운 SModule API(SModule.forEachRegisteredModel())는 모델 검색 또는 로드를 트리거하지 않고 모듈에만 이미 알려진 모델에 액세스할 수 있습니다. SModel API 클라이언트, 특히 SRepositoryContentAdapter 하위 클래스를 사용하는 경우, 새 API를 채택하여 개선의 이점을 얻을 수 있습니다.

SReference라고도 하는 연관 링크의 개선

MPS에는 이제 참조를 생성하기 위한 일관된 API와 업데이트된 내부 표현이 함께 제공됩니다. 이러한 변경 사항은 이후 릴리스에 예정된 모델 참조/지속성 시스템을 개선하는 데 목표를 두고 있습니다. 그럼에도 불구하고 이러한 변경 사항을 통해 모든 모델의 메모리 내 스토리지를 약 5%까지 줄일 수 있습니다.

Java 스텁

MPS는 이제 버전이 지정된 jar 항목을 준수하며 실제 Java 런타임과 일치하는 버전으로 Java 클래스를 노출합니다.

JUL(Java Util Logging)로 Log4j 마이그레이션

MPS와 IntelliJ 플랫폼은 알려진 보안 문제 없이 가장 기본적인 버전의 Log4j 라이브러리를 사용했지만 둘 모두 표준 java.util.logging 패키지로 로깅을 전환했습니다. Log4j API의 요청을 JUL(Java Util Logging) 구현으로 리디렉션하기 위해 호환성 레이어가 구현됩니다(SLF4J 기반).

Debug Log Settings(디버그 로그 설정) 액션을 통해 카테고리에 대한 DEBUG 및 TRACE 수준을 구성할 수 있습니다. 또한, 잘 알려진 JUL 구성 형식을 사용하는 bin/log.properties 구성 파일도 있습니다. 이전 릴리스의 log.xml과 달리 이 구성 파일은 기본적으로 읽히지 않지만 사용자가 idea.log.config.properties.file 시스템 프로퍼티를 사용하여 이 구성(또는 다른 외부 구성)에 대한 액세스를 요청할 수도 있습니다.

명령줄 Make

MPS가 lang.build 선언에서 생성하는 Ant 빌드 스크립트는 별도의 작업을 사용하여 소스를 생성하고 컴파일합니다(MPS 소유 <generate> 및 일반 Ant <javac>). 이제 IDE에서 시작된 Make 프로세스에 해당하는 새로운 <mps.make> 작업이 있습니다. 이는 모델을 컴파일된 코드로 완전히 전환하는 역할을 합니다. 이 작업은 코드 생성과 컴파일을 모두 결합하여 시간을 절약하는데, MPS에 모듈 클래스 로딩을 위해 어쨌든 컴파일된 클래스가 필요하기 때문입니다(<javac> 작업에서 종종 <generate> 동안 이미 완료된 컴파일 작업을 그대로 수행하므로). 또한 Ant 명령줄 빌드와 IDE에서 시작된 Make 프로세스를 서로 훨씬 더 유사하게 만들어 빌드 프로세스의 신뢰성을 높입니다.

자세히 알아보기

제너레이터 테스트

노드 순서를 무시할 수 있는 매칭 옵션으로 제너레이터 테스트가 개선되었습니다. 참조 테스트 모델을 원하는 상태로 가져오는 데 도움이 되는 새로운 모델 루트 재정렬 액션도 있습니다.

자세히 알아보기

TextGen에 대한 시간 초과 설정

MPS는 TextGen 측면에서 잠재적인 오류를 해결하기 위해 M2T(Model-to-Text) 변환 부분에 소요되는 시간을 제한합니다. 이 제한은 이전에 하드 코딩되었습니다. 그러나 최근 일부 대형 모델이 한계에 도달하면서 원치 않는 시간 초과 예외가 발생했습니다. 이제 시간 초과를 제어하기 위해 정의할 수 있는 IDE 설정이 있습니다. 명령줄 빌드에 대한 지원은 향후 릴리스에서 제공될 예정입니다.

Make 프로세스에 대한 Java BaseLanguage 종속성 관리 개선

MPS는 'dependencies' 파일에서 생성된 BaseLanguage 클래스 간의 종속성을 기록하는 데 사용됩니다. Java 컴파일러는 여기에 의존하여 종속 컴파일 클래스에 새로 고침이 필요한지 여부를 파악합니다. 그러나 2021.2에서는 '종속성'이 더 높은 수준의 종속성을 유지하도록 변경되면 더 이상 루트별 클래스 이름을 수집하고 저장할 필요가 없었습니다. 그 결과, MPS가 BaseLanguage 코드(더 이상 개별 종속성을 수집할 필요가 없음)와 Java 컴파일 프로세스(더 이상 개별 파일 종속성을 분석하고, 모듈 및 클래스 경로에 파일 종속성을 특성화하며, '더티' 상태를 전파할 필요가 없음) 모두에 대한 TextGen 시간을 개선하는 데 도움이 되었습니다.

모듈 종속성을 유지하기 위한 새 파일

새로운 deps.cp 파일은 이제 MPS가 모듈 컴파일 그래프를 추론할 수 있도록 모듈별 종속성을 저장합니다. 파일은 변환 상태를 유지하므로 '봉인' 및 조정됩니다(변환에 사용되지 않은 종속성은 나열되지 않음). 이는 실제 모듈 종속성을 기반으로 하여 런타임에 수집된 종속성 그래프와 대조됩니다.

UI 변경

MPS는 더 이상 언어 모듈 아래에 중첩된 런타임/샌드박스 솔루션을 생성하지 않습니다. 기본적으로, 이러한 모듈은 언어 모듈과 형제 관계에 있게 됩니다. '주' 언어 모듈의 이름을 변경하면 이러한 모듈이 '관련'으로 인식되고 '주' 모듈과 함께 이름이 바뀝니다.

자세히 알아보기

라벨 매핑을 위한 복합 키

이전 릴리스에 도입된 복합 라벨 키 기능을 향상시키기 위해 MPS는 체크포인트 모델에서 복합 키 유지를 지원합니다.

플랫폼 기능

Cloning repository(저장소를 복제하는 중) 진행률 표시줄

Cloning repository(저장소를 복제하는 중) 진행률 표시줄

이제 Cloning repository(저장소를 복제하는 중) 진행률 표시줄이 Welcome(시작) 화면 및 프로젝트 목록에 바로 표시되므로 한층 명확해지고, 사용이 편리해졌습니다.

새로운 목차 액션

새로운 목차 액션

이제 문서 헤더를 기반으로 Markdown 파일에서 목차를 빠르게 생성할 수 있습니다.

GPG 서명

GPG 서명

이제 커밋에서 GPG 서명을 만드는 것이 가능합니다. 서명은 Git 도구 창의 Commit Details(커밋 세부 정보) 섹션에 표시됩니다.

Markdown 파일의 명령어 실행

Markdown 파일의 명령어 실행

실행할 명령어가 포함된 Markdown 파일로 작업할 때 여백의 실행 아이콘을 사용하여 파일에서 직접 해당 명령어를 실행할 수 있습니다.

마이그레이션 가이드

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