JetBrains Meta programming System

Overview

official JetBrains project JetBrains MPS

Learn Meta Programming with Us

Design your own Domain Specific Language with full development environment. Get code editor with completion, semantics and type checking with one click. Write generators to compile your DSL into multiple target languages, such as Java, C, XML, and many more.

Useful links

Building MPS from sources

Download IntelliJ IDEA from the JetBrains website. Community edition will work just fine.

  1. Fork the MPS GitHub repository into your own space using the GitHub UI (go to the MPS repo and press the fork button at the top. This will create a fork of the repository in your github space).
  2. Clone your fork to your local machine: git clone [email protected]:/MPS.git. Depending on your internet connection, this may take a long time, MPS is big. Consider using the --depth git parameter to clone only part of the history of the project to save time and space.
  3. It is preferable to work in your own branch, so create a new branch to work in git checkout -b my_branch_name
  4. Open the project in IntelliJ IDEA (either Community or Ultimate Edition)
  5. Attach JB JDK 11 to the project
    1. Download latest JB JDK 11 for your OS from https://bintray.com/jetbrains/intellij-jbr/
    2. Main menu -> File -> Project Structure opens the Project Structure dialog
    3. Under Platform Settings -> SDK, add a new JDK named "JB JDK 11"
  6. Additionally, create an IntelliJ Platform Plugin SDK in the same Platform Settings -> SDK dialog and name it "IDEA IC". The ideaIntegrationCommon, IDEAPlugin and ups-idea-plugin modules need this SDK and they will be using it automatically as soon as you create it and give it the "IDEA IC" name. For more details on how to add an IntelliJ Platform Plugin SDK, consult this help page.
  7. Rebuild the project from the Build menu (it will take quite a while the first time)
  8. Run the MPS -> Run run configuration in the Run menu
  9. Once MPS starts, open the MPS project (point MPS to the root folder of what you've cloned)

Download

If you'd prefer a ready-to-use build, please head over to the Download page and grab an installation package of your choice.

License

MPS is licensed under the Apache 2 open-source license. See the complete MPS license agreement for full details.

System requirements

To build JetBrains MPS from sources you need JDK 11. Older JDK versions are currently not supported for building MPS from sources.

IntelliJ IDEA Community or Ultimate edition shall be used to open the project. The versions of IntelliJ IDEA must reflect the version (branch) of the MPS project that you are opening:

  • IDEA 2019.3.* for MPS 2019.3 and the 193.* branches
  • The latest Idea EAP for the MPS master branch

For MacOS users it is required to use the JetBrains JDK (https://bintray.com/jetbrains/intellij-jdk/).


Develop with pleasure! JetBrains MPS Team

Comments
  • Added http method filter to request handlers

    Added http method filter to request handlers

    RequestHandler can now filter for specific HTTP methods that it is handling. Add a migration to set a default filter that doesn't filter at all to preserve existing semantics. Added test case for checking if the handler filters correctly.

    opened by coolya 11
  • Use character instead of one-character string where available

    Use character instead of one-character string where available

    There're several places where a "one-character" string is created to be passed to a method that accepts a character directly. This last version is normally faster (and has not the overhead of creating the String object). In this commit, I replaced most usages (ignoring files signalled as generated) for String.indexOf, String.lastIndexOf and StringBuilder.append .

    opened by smmribeiro 9
  • GenPlanActiveStep searches for checkpoints within the branch of the active step

    GenPlanActiveStep searches for checkpoints within the branch of the active step

    The old implementation did not handle forks correctly. This implementation now tries to find the checkpoints within the branch of the active step.

    Related issue: https://youtrack.jetbrains.com/issue/MPS-29490

    opened by szabta89 4
  • Add optional hint to messages logging statement

    Add optional hint to messages logging statement

    Adds an optional hint to jetbrains.mps.baseLanguage.logging.structure.MsgStatement. This is especially useful if the hint is an SNode, as the user can click on the log message in message pane and jump to the node.

    Previously, an instance of MsgStatement looked like

    message info "My LogMessage", <no project>, <no throwable>;
    

    Now changed to

    message info "My LogMessage", <no hintObject>, <no project>, <no throwable>;
    

    Hints to SNode, SModel, or SModule are automatically converted to their corresponding references to avoid resource leaks.

    opened by enikao 3
  • Change method name 'describe' to 'createProblemDescription'

    Change method name 'describe' to 'createProblemDescription'

    This class is used to represent GeneratorUtil. The method named 'describe' is to create a problem description. Thus, the method name 'createProblemDescription' is more intuitive than 'describe'.

    opened by pdhung3012 3
  • http-support: expose netty fields

    http-support: expose netty fields

    Expose underlying netty fields with getters in HttpRequest. Sometimes the DSL and methods on HttpRequest are too limiting.

    Use cases that require to set specific headers in the response field can not do that at the moment because for that access to the FullHttpResponse is required.

    Use cases that want to implement a websocket handler can't do that because it requires access to the channel and HttpRequest to do the handshake.

    This change exposes these filed and allows experienced users to implement http APIs similar to what is possible with plugins directly in intellij.

    opened by coolya 2
  • fixed missing type cache when computing substitute actions during typing

    fixed missing type cache when computing substitute actions during typing

    This PR fixes the issue with missing type cache when the list of available substitute actions is computed for a cell on typing.

    When opening a CC-menu on a new cell, the list of available actions gets quickly computed and shown to the user, but when trying to type something in the same new cell, there is a lag of several seconds before the typed text appears in the cell. In case of CC menu the list of substitute actions is calculated in NodeSubstituteChooserHandler.getMatchingActions() inside of a type-checking computation that uses current editor component as type context owner (and hence its type cache). But when something is typed, then the list of substitute actions for the current cell is computed in IntelligentInputUtil.IntelligentCellProcessor.cacheSubstituteInfo() directly w/o being wrapped in any type-checking action. And hence there is no type cache when constraints code for available concepts is executed.

    opened by wsafonov 2
  • Change method name 'found' to 'getPlugins'

    Change method name 'found' to 'getPlugins'

    This class is used to represent PlatformPlugins. The method named 'found' is to get plugins. Thus, the method name 'getPlugins' is more intuitive than 'found'.

    opened by pdhung3012 2
  • Change method name 'done' to 'getParent'

    Change method name 'done' to 'getParent'

    This class is used to represent ChildMatcher. The method named 'done' is to get parent. Thus, the method name 'getParent' is more intuitive than 'done'.

    opened by pdhung3012 2
  • Check plugin dependencies on generation

    Check plugin dependencies on generation

    The check_IdeaPlugin_Dependencies rule doesn't take into account runtimes of used languages because it doesn't have that information in the model. So if a model uses a language that is not otherwise included as a dependency, no errors were reported in the editor but this missing dependency would lead to ClassNotFoundExceptions later on.

    The information is available during the generation time after modules are loaded, so perform a check at that time as a last resort.

    opened by sergej-koscejev 2
  • Fix Condition in New Roottemplate intention

    Fix Condition in New Roottemplate intention

    The filter passed to showCreateNewRootMenu from the "New Root Template" intention did only filter out some generator concepts but the Root Mapping rule can only reference to instances if INamedConcept it makes little sense to show theses concepts in the intention menu because the implementation will directly return and do nothing then it detects that the root node is not INamedConcept.

    As reduce_TemplateInvocation template calls later in the generator require a INamedConcept anyway I think we shouldn't show them to the user in that menu.

    opened by coolya 2
  • Support to serve static ressources

    Support to serve static ressources

    Here is another extension to the http support. It supports serving static resources.

    Not sure if you consider that worthwhile to be added to the code base. It could be implemented entirely in user land. I am using an additional src folder to store the static content.

    If you consider this to be merged, I can do some more work on it, but in general it works. Please advise.

    opened by bkolb 0
  • MPS-28915: Making GeneratorTests extensible

    MPS-28915: Making GeneratorTests extensible

    • refactored Generator to allow adding new assertions
    • added new assertion concept to allow for custom assertions on the model using a code block
    • adapted build script
    opened by bkolb 1
Owner
JetBrains
JetBrains open source projects
JetBrains
TypeQL plugin for JetBrains

JetBrains-Graql-Plugin Basic support for the Graql language (http://grakn.ai) Features Syntax highlighting/validation Find usages support Basic code c

TypeDB OSI 9 Feb 13, 2022
An object mapping jetbrains plugin, it will automatically generate the get/set code between the two objects.

BeanMappingKey 简体中文 | English 一键生成两个实体类之间的字段映射代码,用于代替 BeanUtil 与 MapStruct 等工具。 使用指南 在 Java 开发的过程中,经常会使用众多包装型的对象如:BO、VO、DTO,它们之间往往只有两三个字段的差异, 而对它们进行相互

Rookie 60 Dec 14, 2022
Transactional schema-less embedded database used by JetBrains YouTrack and JetBrains Hub.

JetBrains Xodus is a transactional schema-less embedded database that is written in Java and Kotlin. It was initially developed for JetBrains YouTrack

JetBrains 1k Dec 14, 2022
Transactional schema-less embedded database used by JetBrains YouTrack and JetBrains Hub.

JetBrains Xodus is a transactional schema-less embedded database that is written in Java and Kotlin. It was initially developed for JetBrains YouTrack

JetBrains 858 Mar 12, 2021
A plugin to add Silverstripe template support to PHPStorm and other JetBrains IDEs.

Idea Silverstripe Plugin ⚠️ Work in progress ⚠️ This plugin adds Silverstripe template support to PHPStorm and other JetBrains IDEs. Platform requirem

Loz Calver 25 Sep 27, 2021
TypeQL plugin for JetBrains

JetBrains-Graql-Plugin Basic support for the Graql language (http://grakn.ai) Features Syntax highlighting/validation Find usages support Basic code c

TypeDB OSI 9 Feb 13, 2022
An object mapping jetbrains plugin, it will automatically generate the get/set code between the two objects.

BeanMappingKey 简体中文 | English 一键生成两个实体类之间的字段映射代码,用于代替 BeanUtil 与 MapStruct 等工具。 使用指南 在 Java 开发的过程中,经常会使用众多包装型的对象如:BO、VO、DTO,它们之间往往只有两三个字段的差异, 而对它们进行相互

Rookie 60 Dec 14, 2022
An unofficial edition of ja-netfilter which has built-in plugins for activating JetBrains IDE.

jb-netfilter v2.0.1 An unofficial edition of ja-netfilter which has built-in plugins for activating JetBrains IDE. Usage download from the releases pa

EFL 29 Apr 3, 2022
Aplicación para convertir números entre base con y sin decimales para la certificación de Kotlin Developer de JetBrains Academy.

Kotlin Number Base Converter Aplicación para convertir números entre distintas bases con y sin decimales para la certificación de Kotlin Developer de

José Luis González Sánchez 1 Jan 13, 2022
httpx is a CLI to execute requests from JetBrains Http File.

httpx: CLI for run http file httpx is a CLI to execute requests from JetBrains Http File. How to use? Create index.http file with following code, then

Libing Chen 106 Dec 29, 2022
A JDBC driver for Cloudflare's D1 product, compatible with Jetbrains tools.

D1 JDBC Driver A JDBC driver for Cloudflare's D1 Database product! JDBC is the technology that drives popular database tools such as Jetbrains' databa

Isaac McFadyen 21 Dec 9, 2022
Programming Services and Processes - 04 Secure Programming Techniques

Programación de Servicios y Procesos - 04 Técnicas de Programación Segura Tema 04. Técnicas de Programación segura. Curso 2021/2022. Contenidos Introd

José Luis González Sánchez 5 Dec 27, 2022
Java-Programs---For-Practice is one of the Java Programming Practice Series By Shaikh Minhaj ( minhaj-313 ). This Series will help you to level up your Programming Skills. This Java Programs are very much helpful for Beginners.

Java-Programs---For-Practice is one of the Java Programming Practice Series By Shaikh Minhaj ( minhaj-313 ). This Series will help you to level up your Programming Skills. This Java Programs are very much helpful for Beginners. If You Have any doubt or query you can ask me here or you can also ask me on My LinkedIn Profile

Shaikh Minhaj 3 Nov 8, 2022
A simple banking system written in Java used to teach object-oriented programming and best coding practices.

didactic-bank-application A simple banking system written in Java used to teach object-oriented programming and best coding practices. It is a three-l

Ingrid Nunes 32 Aug 28, 2022
BAIN Social is a Fully Decentralized Server/client system that utilizes Concepts pioneered by I2P, ToR, and PGP to create a system which bypasses singular hosts for data while keeping that data secure.

SYNOPSIS ---------------------------------------------------------------------------------------------------- Welcome to B.A.I.N - Barren's A.I. Natio

Barren A.I. Wolfsbane 14 Jan 11, 2022
Flash Sale System AKA. seckill system

FlashSaleSystem Project highlights Distributed system scheme From a single machine to a cluster, it is easy to scale horizontally simply by adding ser

wsbleek 12 Sep 13, 2022