MPS 2018.3의 새로운 기능

BaseLanguage

콘셉트 재정의됨/구현됨 아이콘

MPS는 재정의됨/구현됨 아이콘으로 콘셉트을 표시하여, 현재 콘셉트의 상위 콘셉트 또는 하위 콘셉트으로 쉽게 이동할 수 있습니다.

BaseLanguage 클래스에 대한 사용자 지정 패키지

생성된 클래스의 Java 패키지를 관리할 수 있는 유일한 방법은 포함하는 모델의 이름을 통한 것뿐이었습니다. 이제 새로운 분류자 프로퍼티 'packageName'을 사용하면 생성된 클래스의 Java 패키지를 관리할 수 있습니다. 이 프로퍼티는 루트 분류자에도 사용할 수 있습니다.

BaseLanguage 확장에 대한 새로운 생성 기능

BaseLanguage는 언제나 많은 확장으로 사용자 지정을 할 필요가 있었습니다. 하지만, 일부 확장의 경우 적절한 생성기를 구현하기가 까다로웠습니다. 이제 BaseLanguage는 여러 개의 새로운 생성-시간 콘셉트을 제공하여 확장의 생성기를 작성하기가 쉬워졌습니다.

Lvalue-표현식의 생성

Lvalue-표현식은 값을 사용해 읽거나 쓸 수 있는 변수로 평가됩니다. 어떤 경우에는 해당 표현식이 사용된 컨텍스트의 유형에 의존할 수 있기 때문에 Lvalue-표현식을 생성하기가 어렵습니다. 이제 새로운 'generic lvalue-expression' 생성-시간 콘셉트을 사용해 생성기가 더 간단해지고, 컨텍스트에 의존하지 않게 되었습니다.

새로운 릴리스에서는 '@byRef' 표현식으로 임의의 lvalue-표현식을 래핑할 수 있습니다. 그러면 BaseLanguage 생성기는 래핑된 표현식을 'Reference <T>' 유형 표현식으로 변환하고, 래핑된 변수에 대한 get 및 set 연산을 제공합니다.

이번에 새로 도입된 생성-시간 콘셉트은 모두 이 문서에 자세히 설명되어 있습니다.

Lvalue를 참조로 변환

일부 표현식은 기타 Lvalue-표현식을 집계하여 집계된 표현식에서 생성된 변수로 복합 작업을 만듭니다(예: plus assignment 또는 increment 및 get 표현식). 이러한 의미를 가진 새로운 표현식 삽입은 해당 구문에 적절한 생성기를 작성하기 어려웠기 때문에 예전에는 가능하지 않았습니다.

BaseLanguage에서의 기본 메서드 지원

2018.3 버전에서 MPS는 BaseLanguage 인터페이스에서 'default' 메서드를 생성할 수 있습니다. 'default' 키워드는 DefaultModifier 콘셉트에 의해 구현되고, BaseLanguage에서 한정자 콘셉트을 확장합니다. DefaultModifier는 jetbrains.mps.baseLanguage.jdk8 언어에 있습니다. 즉, 인터페이스에서 'default' 메서드를 생성하려면 jdk8 언어를 가져와야 한다는 뜻입니다.

생성기

생성기 언어

$INCLUDE$ 매크로는 사용이 중지되었으며 그 인스턴스를 $CALL$로 대체하는 마이그레이션 작업이 진행됩니다. 전자는 인수가 있는 템플릿을 지원하지 않으므로 템플릿을 호출하기 위하여 두 메커니즘을 모두 유지할 이유가 없었기 때문입니다.

이제 $WEAVE$ 매크로와 위빙(weaving) 규칙으로 인수가 있는 템플릿을 호출할 수 있습니다. 해석된 템플릿이 '컴파일된' 생성기에서 외부 템플릿을 위빙할 경우, 더 이상 해석되지는 않지만 컴파일된 템플릿 코드는 여전히 실행됩니다. '컴파일된' 템플릿은 이제 해석된 템플릿을 위빙할 수 있습니다.

Java reflection은 템플릿 모델에서 QueriesGenerated라고도 하는 쿼리 집합에 액세스하는 데 사용되지 않습니다.

UI/UX

MacBook Touch Bar

기본 컨텍스트는 애플리케이션을 실행, 빌드 및 디버그하기 위한 컨트롤과 새로운 실행/디버그 구성을 빠르게 선택 또는 생성할 수 있는 기능을 포함하고 있습니다. Preferences(환경 설정) | Appearance & Behavior(모양 및 동작) | Menus and Toolbars(메뉴 및 도구 모음)에 액션을 사용자 지정할 수 있는 새로운 Touch Bar가 추가되었습니다.

이 Touch Bar는 확장할 수도 있습니다. 특정 MPS 'InterfaceGroup'에 필요한 액션을 추가하기만 하세요.

고대비 UI 테마

새로운 고대비 테마에 대한 지원이 추가되었습니다. 이 기능은 Preferences(환경 설정) -> Appearance & Behavior(모양 및 동작)에 있는 테마 옵션에서 드롭다운 목록을 사용해 액세스할 수 있습니다.

사용되지 않은 코드를 찾는 새로운 액션

Find Usages of Deprecated(사용되지 않는 항목의 위치 검색) 액션을 사용해 사용되지 않은 요소들의 모든 사용 위치를 찾을 수 있습니다. 이제 사용 위치 검색 보고서는 예상되는 코드 제거 버전에 따라 항목들을 그룹화하므로, 더 간편히 심각도를 파악하고 먼저 제거할 항목의 우선순위를 정할 수 있습니다.

재정의되거나 구현된 동작 메서드에 대한 새로운 아이콘

동작 메서드에 새로운 아이콘이 도입되었습니다. 다음 스크린샷은 선택된 항목을 재정의 또는 구현하는 getPresentation() 메서드 목록을 표시하며, 여기서 해당 위치로 이동할 수 있습니다.

재정의됨/구현됨 아이콘 추가 개선

재정의 또는 구현된 콘셉트/클래스/메서드에 대한 팝업이 비동기화되어 백그라운드에서 MPS가 팝업을 검색 결과로 채웁니다. 또한, 이제 검색 대상의 이름을 사용해 필터링할 수 있습니다.

탐색기 변경

MPS에 의해 배포된 탐색기가 업데이트 및 최적화되었습니다. 탐색기를 비동기적으로 실행하려면 특수한 OnEachNodeFoundByExpression을 사용해야 합니다. 이는 발견된 각 노드에 대해 실행되는 콜백을 사용하는 간단한 탐색기 호출입니다. 이에 따라 콘셉트에 대한 사용 위치 검색도 변경되었습니다. 이 옵션은 각각 하위 콘셉트과 상위 콘셉트의 목록을 생성하는 Derived Concepts(파생 콘셉트) 및 Concept Ancestors(콘셉트 원본)로 확장되었습니다. 또한, 동작 메서드에 대한 사용 위치 검색 옵션은 'Overridden Methods'(재정의된 메서드) 및 'Overriding Methods'(재정의하는 메서드)로 확장되었습니다.

특정 오류 표시 방지

오류 표시 방지 기능은 typesystem 검사기가 잘못 발견한 오류를 MPS가 표시하지 않도록 할 때 사용하던 도구였습니다. 'Suppress error for node ...(노드의 오류 표시 방지)' 인텐션을 사용해 'SuppressErrorAnnotation' 속성 주석을 노드에 추가하면 해당 노드 또는 해당 노드의 하위 항목에 대해서는 오류 메시지가 표시되지 않았습니다.

그러나 이제 특정한 오류 메시지만 표시되지 않도록 설정할 수 있습니다. 특정 오류 메시지는 해당 노드 및 해당 노드의 모든 하위 항목에 대해 표시되지 않지만, 다른 모든 메시지는 여전히 유지됩니다. 자세한 정보는 이 문서를 참조하세요.

에디터

재사용 가능한 셀 액션 맵

기존 액션 맵의 셀 액션 맵 항목을 가져오기를 통해 새로운 액션 맵에서 재사용할 수 있습니다.

빌드 언어

팁과 정보

MPS에 대한 기본 팁과 정보를 이제 사용자 지정할 수 있습니다. 이 작업은 빌드 스크립트에 추가된 새로운 팁과 정보 콘셉트에서 수행할 수 있습니다. 팁은 일반 MPS 배포에서 다시 사용할 수 있거나, 디렉터리 또는 솔루션에서 가져올 수 있습니다.

Tips & Tricks language

솔루션에서 팁과 정보를 가져오려면 모델을 사용해 솔루션을 생성하고 jetbrains.mps.build.tips 및 jetbrains.mps.core.xml 언어를 추가해서 사용된 언어를 모델링하세요. 그런 다음, MPSTipsAndTricks 콘셉트의 인스턴스를 생성하여 다양한 팁을 만들 수 있습니다. 각 팁은 HTML 형식의 텍스트이며, 최대 하나의 이미지를 포함할 수 있습니다.

빌드 패키징 옵션

BuildMps_IdeaPlugin의 사용자 지정 패키징 옵션이 사용 중단됩니다. 이제 레이아웃 BuildMpsLayout_Plugin 구성에서 직접 패키징을 선택할 수 있습니다.

자동 패키징을 통해, 제공된 모든 언어와 솔루션은 플러그인 루트 디렉터리에 있는 'languages' 폴더에 배치됩니다. 수동 패키징의 경우 개발자가 직접 전체 플러그인 레이아웃을 제공해야 합니다.

빌드 언어의 새로운 구성

빌드 언어의 테스트 모듈 구성이 확장되어 MPS ant 테스트가 실행될 때 로드되어야 하는 추가적인 IntelliJ IDEA 플러그인을 지정할 수 있게 되었습니다.

이전에는 테스트 환경에서 특정 플러그인이 필요한 경우 MPS 빌드 언어 엔진이 해당 테스트가 포함된 모듈로부터 이를 추론하지 못했습니다. 이제 MPS Ant 테스트 실행 중 필요한 플러그인이 표시됩니다.

기타

완전히 컴파일되는 데이터 유형

데이터 유형이 완전히 생성되도록 하였습니다. 이제 SModel API에서 데이터 유형과 관련하여 생성된 모든 정보를 사용할 수 있습니다.

마이그레이션 데이터를 주석으로 저장

이제 MPS는 마이그레이션 데이터를 이전하는 새로운 메커니즘을 지원합니다. 이 메커니즘은 새로 생성된 마이그레이션에 적극 권장합니다. 이제 데이터가 있는 생성된 노드는 해당 데이터와 관련된 장소에 가까운 노드에 연결됩니다.

데이터가 있는 노드를 생성하는 마이그레이션 스크립트는 해당 노드의 콘셉트을 선언하고, putData() 구성을 사용하여 각 주석을 모델에 삽입합니다.

데이터가 포함된 노드를 검색하는 방법은 예전과 꽤 비슷합니다.

충돌 해결 개선

이전에는 로컬과 원격 양쪽의 변경 사항을 적용하는 것이 불가능했습니다. 어느 한 쪽의 변경 사항을 적용하면 다른 쪽의 변경 사항이 거절되었기 때문입니다.

여러 개의 역할이 있는 하위 항목의 경우 양쪽의 변경 사항을 적용하는 것은 실용적이지 않습니다. 그래서 이제 충돌하는 어느 한 쪽의 변경 사항이 적용되면, 다른 쪽의 변경 사항은 변경된 그룹의 끝에서 추가 항목으로 변환됩니다. 이들을 개별적으로 적용하거나 무시해야 합니다.

충돌하는 왼쪽 버전을 적용한 후에도 여전히 오른쪽 버전의 줄을 적용하거나 무시할 수 있습니다.