Coder Social home page Coder Social logo

antlr / jetbrains-plugin-sample Goto Github PK

View Code? Open in Web Editor NEW
117.0 117.0 36.0 3.26 MB

A sample plugin for jetbrains IDEs that uses an ANTLR grammar for a nontrivial custom language.

License: BSD 2-Clause "Simplified" License

ANTLR 6.62% Java 93.38%

jetbrains-plugin-sample's People

Contributors

bjansen avatar kisioj avatar mathiasburger avatar parrt avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

jetbrains-plugin-sample's Issues

Missed issues in editor

A little bit strange, but the IDEA editor doesn't show any errors for the following code:

var b //must have assignment
func fun(){
    return //must return something
}

I have checked the same example in ANTLRv4 plugin and it shows 2 errors.

No string highlighting with \n

I have this code:

func f() {
    var s = "abc \n"
}

The problem is that "abc \n" is black (should be green because it is string). Problem appears if I use special symbols like \n.
When I set cursor before this string and then type backspace and space string is highlighted correctly.
However the parsing seems to be correctly in both cases.
Any ideas why this may happen?

Adding new custom keywords leads to errors

Hello,

Today I have been trying to use this plugin to create a new language for a JetBrains product.
I however can't extend the plugin with new keywords.

I keep getting errors such as:

image
image

While the ANTLR preview works just fine:
image

I have tried to add a block keywords (e.g. 'class') that works very similar to a func definition:

script
	:	vardef* define_class* function* statement* EOF
	;

define_class
    : 'class' ID block
    ;

// ...

CLASS : 'class' ;

And I have tried to copy the print() definition to log(), which also leads to errors in the IDE (but not in the preview):

image
image

	|	'print' '(' expr? ')'								# Print
	|	'log' '(' expr? ')'								 # Log

// ...

PRINT : 'print' ;
LOG : 'log' ;

When replacing print with log, it does work:

image


I have tried editing and copying Java files/classes and cases/rules to match my new keywords, but this did not help at all.
What am I missing/supposed to be doing in order to create new keywords?

NoClassDefFoundError

Hi, I tried run this project, and the compile phase seams to be well, but when running the program, this error appear:

[   8276]  ERROR - i.util.KeyedExtensionCollector - org/antlr/v4/runtime/Parser 
java.lang.NoClassDefFoundError: org/antlr/v4/runtime/Parser

I have set the path variable as the antlr official website says:

export CLASSPATH=".:/usr/local/lib/antlr-4.5.3-complete.jar    :$CLASSPATH"

Could anyone help me solving the problem?

Lexer causes offset mismatch -> IllegalStateException; no file displayed

I'm trying to use my Prolog grammar to build a jetbrains prolog plugin. I appended a rule ERRCHAR: . ->channel(HIDDEN); and rewrote/threw out all the "sample language" specific stuff, so I can run the IDE with my plugin. Opening a prolog file doesn't work, however, I see in idea.log this backtrace (repeatedly, with different origins):

2018-03-07 22:36:34,339 [ 451765]  ERROR - oncurrency.BoundedTaskExecutor - Unexpected termination offset for lexer org.antlr.jetbrains.adaptor.lexer.ANTLRLexerAdaptor@5dc85b57 
java.lang.IllegalStateException: Unexpected termination offset for lexer org.antlr.jetbrains.adaptor.lexer.ANTLRLexerAdaptor@5dc85b57
	at com.intellij.openapi.editor.ex.util.LexerEditorHighlighter.doSetText(LexerEditorHighlighter.java:394)
	at com.intellij.openapi.editor.ex.util.LexerEditorHighlighter.setText(LexerEditorHighlighter.java:360)
	at com.intellij.openapi.fileEditor.impl.text.AsyncHighlighterUpdater.performInReadAction(AsyncHighlighterUpdater.java:59)
	at com.intellij.openapi.progress.util.ReadTask.lambda$runBackgroundProcess$0(ReadTask.java:66)
	at com.intellij.openapi.application.ReadAction.compute(ReadAction.java:47)
	at com.intellij.openapi.progress.util.ReadTask.runBackgroundProcess(ReadTask.java:66)

Debugging shows me that the exception stems here https://github.com/JetBrains/intellij-community/blob/master/platform/editor-ui-ex/src/com/intellij/openapi/editor/ex/util/LexerEditorHighlighter.java#L394
because textLength (by the ANTLR lexer) is one bigger than mySegments.myEnds[last].

Has anybody else encountered a similar error? Is it a fault in my rewrite of the surrounding plugin files, or a bug somewhere else?
Would anybody be willing to look into the problem, if I publish the project so far?

Leaf nodes should not implement INamedElement (bug fix for find usages)

IdentifierPSINode is a leaf node in your AST, and it implements PsiNamedElement.

public class IdentifierPSINode extends ANTLRPsiLeafNode implements PsiNamedElement {

It should not implement PsiNamedElement.

The Custom Language tutorial says

While the referencing element and the referenced element both may have a name, only the element which introduces the name (e.g., the definition int x = 42) needs to implement PsiNamedElement. The referencing element at the point of usage (e.g., the x in the expression x + 1) should not implement PsiNamedElement since it does not have a name.

I based my leaf node implementations on IdentifierPSINode, so I had my leaves implement PsiNamedElement. I just realized that this was causing a bug with "Find Usages". When searching for usages from a declaration, there were no results. Changing my leaves to not implement this interface fixed this problem.

Before I found this fix, I found the following workaround. I had my declaration be a reference to itself. In this case, "right-click -> Find Usages" works correctly, but "right-click -> Go To -> Declaration or Usages" does not. If there was only one usage, then the correct behavior would be to go to that usage. Instead, the behavior in this case is that the cursor moves to the beginning of the declaration (which is the current behavior for the current ANTLR plugin antlr/intellij-plugin-v4#580).

Commit on antlr/jetbrains broke sample

This commit antlr/antlr4-intellij-adaptor@57db94a

Broke (at least) this source file: /jetbrains-plugin-sample/src/java/org/antlr/jetbrains/sample/psi/VardefSubtree.java.

The constructor signature was changed.

It's very easy to get around this:

$ cd adaptor
$ git checkout 0f4e20755f8ae7fe5bec1e8f52ccefab42f33a87

But I think this repo should still be fixed because it took me a while to figure out.

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.