Git Product home page Git Product logo

jetbrains-plugin-sample's Introduction

Sample IntelliJ plugin using ANTLR grammar

This is a demonstration of ANTLRv4 library for IntelliJ plugins, which makes it easy to create plugins for IntelliJ-based IDEs based on an ANTLRv4 grammar.

Running the plugin for the first time

Make sure the Gradle plugin is installed in your IDE, go to File -> Open, select the build.gradle file and choose Open as Project.

If you already imported the project when it was not based on Gradle, then choose the option to delete the existing project and reimport it.

Once the IDE is done downloading dependencies and refreshing the project, you can use the Gradle tool window and use the following Tasks:

  • build > assemble to build the project
  • intellij > runIde to run the plugin in a sandboxed instance

Noteworthy things

Gradle build

The build is based on Gradle, and uses the gradle-intellij-plugin, which makes it easy to:

  • pull dependencies, especially the IntelliJ SDK and antlr4-intellij-adaptor
  • build and run tests in a CI environment on different versions of the SDK
  • generate lexers & parsers from your grammars, thanks to the ANTLR plugin for Gradle
  • publish plugins to the JetBrains Plugins Repository
  • configure the project for occasional contributors ๐Ÿ™‚

ANTLRPsiNode

PSI nodes defined in the plugin extend ANTLRPsiNode and IdentifierDefSubtree, which automatically makes them PsiNameIdentifierOwners.

Error highlighting

Errors are shown by SampleExternalAnnotator, which makes use of org.antlr.intellij.adaptor.xpath.XPath to detect references to unknown functions.

ParserDefinition

SampleParserDefinition uses several handy classes from the adaptor library:

  • PSIElementTypeFactory to generate IElementTypes from tokens and rules defined in your ANTLRv4 grammar
  • ANTLRLexerAdaptor to bind generated lexers to a com.intellij.lexer.Lexer
  • ANTLRParserAdaptor to bind generated parsers to a com.intellij.lang.PsiParser

Misc

WARNING. Turn on Dragon speech recognition for Mac and do a rename. GUI deadlocks. Every time. Turn off dragon. No problem ever. See JetBrains forum.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.