Giter Club home page Giter Club logo

intellij-haxe's Introduction

Haxe plugin for Intellij IDEA and Android Studio

This plugin allows you to develop multi-platform programs using the Haxe language with Intellij IDEA, Android Studio and other IntelliJ IDEA-based IDEs by JetBrains. It requires Intellij IDEA Ultimate or Community Edition 2023 or later, or Android Studio Giraffe or later

Technical Support

Support for this plugin is available through the project's home page: http://intellij-haxe.org, or the github issues list http://github.com/HaxeFoundation/intellij-haxe/issues.

Past Versions Announcement

Very, very few users are continuing to use this plugin with older versions of IDEA. Maintaining a code base that can compile to multiple versions is also a lot of work. its therefore been decided that from now on we will only target one version in develop branch but make maintenance branches for older versions so that important fixes can be backported.

If you for some reason need to compile one of the old versions that was part of the multi-version code base you can still find it on the legacy/develop branch.

Install

JetBrains' official plugin installation documentation is at https://www.jetbrains.com/idea/plugins/. The Haxe plugin page is https://plugins.jetbrains.com/plugin/6873?pr=idea.

To install using IDEA (from Intellij plugin repository):

Install and start IDEA. It is found at https://www.jetbrains.com/idea

If you do not have a project open in IDEA (and after first-time setup):

  • On the IDEA welcome screen, select "Configure(dropdown)->Plugins"
  • Click on the "Browse Repositories..." button.
  • Type 'haxe' to see the description for the plugin.
  • Select 'Install' to install it.
  • Allow IDEA to restart and initialize the plugin.

If you already have a project open in IDEA:

  • Open the Settings dialog (File->Settings...)
  • Highlight "Plugins" in the leftmost column
  • Click on the "Browse Repositories..." button.
  • Type 'haxe' to see the description for the plugin.
  • Select 'Install' to install it.
  • Allow IDEA to restart and initialize the plugin.

To manually install the latest or a previous Github release

Download the intellij-haxe.jar file from the release you want from Github releases. More recent releases have begun to be named intellij-haxe-<release>.jar, where <release> is the version of Idea for which the Jar is built. (e.g. intellij-haxe-2022.3.jar) Make sure that you pick the proper one for your release. A message should pop up and warn you if a release is incompatible.

If you do not yet have a project open in IDEA (and after first-time setup):

  • On the IDEA welcome screen, select "Configure(dropdown)->Plugins"
  • Click “Install plugin from disk...”
  • Select the “intellij-haxe.jar” file you downloaded
  • Allow IDEA to restart and initialize the plugin.

If you already have a project open IDEA:

  • Open the Settings dialog (File->Settings...)
  • Highlight "Plugins" in the leftmost column
  • Click “Install plugin from disk...”. On 2019.x versions or later, click on the settings (gear) icon to see the "Install from disk..." menu item.
  • Select the intellij-haxe-<version>.jar file you downloaded
  • Allow IDEA to restart and initialize the plugin.

Build

Note that installation as described above installs a fully built version of the plugin (the .jar file). Most users do not have to build the product for themselves. This section is for those who like to dig a little deeper.

This describes the command line build. To build from within Intellij IDEA itself, see the contributing document to setup your development environment. Much more detail is provided there for command line build options as well.

Dependencies

  • OpenJDK 17
  • A windows command prompt or bash compatible shell

Build command

Windows

gradlew.bat clean build verifyPlugin 

Mac/Linux

./gradlew clean build verifyPlugin 

NOTE: You can run the build without tests by substituting build with buildPlugin on the lines above

This will generate a intelllij-haxe-<release>.jar file at the root of the project that you can then install from disk (see “Install the latest or a previous Github release).

Note that the first time you build the project Gradle will download the requested version of IntelliJ Ultimate and any other other dependencies. This can be quite slow at times and prone to failure. For repeated building and testing, we recommended that you set up your machine as described in the contributing document.

Test

Dependencies

Same as for build.

Test command

Windows

gradlew.bat test

Mac/Linux

./gradlew test

This will build and run the tests and display the JUnit report.

Use the hxcpp debugger

NOTE: IDEA Community Edition currently will not start an IDE-based debugging session. For that, IDEA Ultimate is required. Command-line debugging is available because that is a feature of the Haxe language itself. See the hxcpp-debugger project for more information.

The hxcpp debugger functionality conforms to the Haxe v3.0 debugger. In order to use this, you must:

  • Install the VERSION 1.1 debugger haxelib from https://github.com/HaxeFoundation/hxcpp-debugger/tree/protocol_v1.1. The hxcpp-debugger that is installed via 'haxelib install' is generally not the latest or best working version. (The Haxe Foundation maintainers do not release regular updates for it). Instead, get the current sources locally: Install git and clone the repository from http://github.com/HaxeFoundation/hxcpp-debugger and install via

    haxelib git hxcpp-debugger <your_local_clone> protocol_v1.1
    

    Then, you'll have the version that matches the plugin. Whenever you need to update the debugger to the latest sources, do a 'git pull' and then rebuild your app.

  • Re-build your project using this newest debugger haxelib.

  • Configure your haxe program to start the debugger when the following command line option is provided:

    -start_debugger
    

    If you expect to do remote debugging, you'll also have to support:

    -debugger_host=[host]:[port]
    

    Most likely you'll just want to add the following in your main() when -start_debugger is set:

    new debugger.HaxeRemote(true, host, port);

    Generally speaking, the build/debug configuration (Run->Edit Configurations) is set up to use port 6972, so you can probably cheat and use:

    new debugger.HaxeRemote(true, "localhost", 6972);

    However, the line has to match your debug settings. Fortunately, they are passed to your program on the command line. Notice the "-start_debugger -debugger_host=localhost:6972" passed to haxelib:

    C:/HaxeToolkit/haxe/haxelib.exe run lime run C:/temp/issue349/openfl_cpp_debug/openfl_cpp_debug/project.xml
      windows -verbose -Ddebug -debug -args  -start_debugger -debugger_host=localhost:6972
    

Your program should now:

  1. Look for the '-start_debugger' parameter before doing anything. It won't be there if the program is being started via the "Run" command from IDEA.
  2. Parse the '-debugger_host=' parameter. If it exists, then a remote controller (e.g. IDEA) will be trying to connect on that port. If it doesn't exist, then the user (you) probably want to start the command line debugger:
new debugger.Local(true);

Here's a snippet you can use: (Thanks to @isBatak)

#if (debug && cpp)
  var startDebugger:Bool = false;
  var debuggerHost:String = "";
  var argStartDebugger:String = "-start_debugger";
  var pDebuggerHost:EReg = ~/-debugger_host=(.+)/;

  for (arg in Sys.args()) {
    if(arg == argStartDebugger){
      startDebugger = true;
    }
    else if(pDebuggerHost.match(arg)){
      debuggerHost = pDebuggerHost.matched(1);
    }
  }

  if(startDebugger){
    if(debuggerHost != "") {
      var args:Array<String> = debuggerHost.split(":");
      new debugger.HaxeRemote(true, args[0], Std.parseInt(args[1]));
    }
    else {
      new debugger.Local(true);
    }
  }
#end

Contribute

See the contributing document.

intellij-haxe's People

Contributors

alexander-doroshko avatar anibyl avatar as3boyan avatar bji avatar bynuff avatar canigetapr avatar cdracm avatar chashnikov avatar develar avatar dmitry-avdeev avatar donnerpeter avatar ebattivo avatar eliasku avatar ericbishton avatar fkorotkov avatar giabao avatar haysclark avatar ilya-ku avatar m0rkeulv avatar mayakwd avatar mithepner avatar realyuniquename avatar sganapavarapu1 avatar shafirov avatar soywiz avatar tbrannam avatar trespasserw avatar winmain avatar yanhick avatar yole 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

intellij-haxe's Issues

Optimize import statements

In Haxe source files, add missing import statements and remove unused ones. New code shall be generated at the top of the file, right after the opening comment and before any other definitions.

TIR: STB-2902

Implement IDE Haxe native debugging

Currently, we cannot debug native Haxe code within IDEA; we have to compile it to some other language first and then debug that code. This is both complex and tedious. The generated code is not obviously identified from the original and vice versa.
Bryan Ischo has written a text mode debugger for Haxe. TiVo has already made this code public and other folks are using it (in non-IDEA environments; FlashDevelop, I think). We want to hook it up to the IDEA debugging hooks so that our developers can have native-Haxe debugging within the IDE.

Goals:

  • Debugging hxcpp targets in the IntelliJ IDE supports all of the command-line debugger functionality in a seamless way, similar or identical to how these functions are handled in the Flash debugger.
  • A document has been posted to the TiVo wiki which describes how to set up debugging hxcpp in IntelliJ (may require starting a debugging server process or some such) and the basics of using it.

TiVo internal reference: STB-1369

Improve Haxe plug-in code parsing and representation

Two related things don’t work: Find Usages and the Type Hierarchy. Find Usages is dependent upon the deprecated-and-now-deleted APIs that were available up to version 13.1.1. When usages are requested, only those within a file currently loaded within the IDE are found. The underlying problem is that the background processing which reads type information, etc. from un-opened files is hitting a “method not found” error and stopping.
It is likely that the Type Hierarchy is also dependent upon the missing APIs.

TiVo internal reference: STB-2610

Use the Haxe compiler itself to output the PSI (AST) for IDEA, similar to any other language compilation.

Haxe is a constantly evolving language, gaining several new features each year. In addition, the language cannot be precisely described using the Backus Normal Form (BNF) because it has a rich macro processing capability which effectively changes the semantics of the language locally. That is: the language can be redefined contextually and on-the-fly by the engineers using it.
The currently implemented plug-in has no such contextual polymorphism and is implemented using a fairly rigid BNF syntax that can be (is) passed through a code generation process to create both the lexer and parser portions of code. Then, nontrivial functionality is added to it. Basically, the language is baked in one way, and if you use any of the advanced features, you are out of luck when it comes to IDE support.
Since Haxe already has a compiler that does understand the language flexibility, and the language is designed to be cross-compiled into other languages, it makes sense that the compiler can be extended to build an abstract syntax tree (AST, which is what a ‘PSI’ is in the IDEA environment) that the IDE can consume. In fact, the Haxe implementers have already built a similar functionality so that IDEs can support completion (the ability for a portion of text to be typed and the IDE can propose matches, which reduces keystrokes required by developers and reduces mis-typing errors).
This task at hand is to create a mode of the compiler that will create an AST that can be translated into the target environment, then to create a specific translation into the IntelliJ IDEA environment.

TiVo internal reference: STB-2045

No indentation on extern classes

When using the "Auto-Indent Lines" command, it looks like this...

extern class MyClass {
function new() : Void;
}

but it should look like this.

extern class MyClass {
    function new() : Void;
}

Parser doesn't recover after new A|

Another issue that @profelis reported earlier:

package ;
class Main {
    public function new() {
    }

    private static function main():Void {
        trace("hello world");

        var s = "";
        var d = Date.now();
        trace(d);

        test();

        new RT|
    }

    static public function test() {

    }
}

class RTask {
    public var a:Int;

    public function new() {

    }

}

The problem is that parser chokes on new A| and it should recover after it somehow, but it doesn't, so all data below this new expression statement doesn't get parsed properly.

TIR: STB-7293

Run to position functionality not implemented in debugger

This feature is simply not implemented. I believe that what it should do is to temporarily disable all breakpoints, then create a temporary breakpoint at the specified position, then run the program until that temporary breakpoint is hit, then delete that temporary breakpoint and re-enable all other breakpoints.

There are some tricky issues to address though. So right now this functionality just isn't implemented.

Type inference does not work for inline map declaration

var map = ["key" => 123];
var value = map.get("key"); // unresolved symbol warning

The type of map actually shows up as an Array, probably because of the array syntax. Calling get on it gives no code completion and shows up as an unresolved symbol warning. It also confusing to get code completion for Array methods when it's not an Array.

Project options: Project type radio button click

Imgur

So as you can see, after I clicked on NMML circle it still shows up options for OpenFL, when I click on NMML text it does works as expected.

Perhaps can be fixed just by adding corresponding handler to radiobutton if possible.
TIR: STB-7294

Automatic classpath resolving

Classpath:

OpenFL/NME:

  1. Add basic classpaths to IntelliJ project(by parsing haxelib path nme to get path to currently active nme path)
  2. Perhaps use haxelib run nme display target on project file which returns basically HXML data, in which we can get all classpaths(-cp) and libs for that target. Or just parse project.xml using plugin, but that should consider target conditionals and etc.

HXML projects:
parse *.hxml files data to get classpaths and libs, basically it's implemented in HXML parser.

HAXE projects and all other:
Take into consideration project arguments and etc, for example if Haxe project has specified additional compiler arguments - parse it too, basically same HXML data.

OpenFL/NME: if project.xml gets changed - data should be reparsed and classpath should be updated.
Same for .hxml and compiler arguments options in project options.

And if user changes type of project(or picks another project.xml/*.hxml), it should be updated too.

TIR: STB-7286

Project generation templates/wizards

I think currently initial project set-up is too complicated for new users, so I suggest to make some templates for project types like project for each Haxe target, HXML-based project, NME and OpenFL.
And by having such project templates it would be easier for devs to add project templates for other frameworks like (Flambe, HaxeFlixel, HaxePunk, Kha and other).

Syntax error for two different function definitions in compiler conditionals

That might be a tricky one to fix and it's not a big deal at all (it doesn't stop code from parsing/highlighting), but for consistency sake it's should have a ticket.

#if flash
    @:setter(height)
    public function set_height(value:Null<Float>):Void // An error is highlighted at the end of this line.
#else
    override public function set_height(value:Null<Float>):Float
#end

TIR: STB-7297

Class members and method arguments do not have special highlighting anymore

In the latest jar class members and method arguments are not highlighted as such anymore:
image

While in older jar it highlighted as expected:
image

(Please note how method argument has an underscore. In default IntelliJ Darcula theme method arguments do not have such underscore. You can modify default style yourself, but here is my theme for testing convenience - http://pastebin.com/download.php?i=gcErwThZ save as ".icsl" inside "~.IntelliJIdea13\config\colors" folders)

TIR: STB-7296

"macro" keyword causes syntax errors

In both JetBrains branch and ClassHierarchy branch:

In local variable declaration var a = macro 5; "macro" highlighted with warning saying "unresolved symbol".
In field declaration macro static function foo():Expr {} "macro" highlighted with error saying " 'macro' unexpected ".

"(a=b).value" => "unresolved symbol"

screen shot 2014-10-12 at 1 25 03

I don't know how it's happening. Idea says "unresolved symbol" only :).

next for copy-paste:

using StringTools;
class Demo{
    function demo(){
        var lines = "--+--+--".split("+");
        for(i in 0...lines.length)
            if((lines[i] = lines[i].rtrim()).length > 0)
                trace(lines[i]);
    }
}

TIR: STB-7290

Child class of Parent with Type parameters, has no auto-complete.

For example:

class StringChild extends Parent<String> {}
class Parent<T> {}

Auto-complete won't work for StringChild, there won't be a way to navigate to it's members, refactor or even see it highlighted as a member.

Another very good and important example is the popular HaxeFlixel project - any class that extends FlxGroup (https://github.com/HaxeFlixel/flixel/blob/master/flixel/group/FlxGroup.hx) won't have auto-complete or any other features working for them.

TIR: STB-7288

For in loop type inference only works for arrays

Type inference works fine for the following because it's an array. Item will be recognized as a String and will give code completion for the "indexOf" method.

var array : Array<String> = ["item"];
for (item in array) {
    var index = item.indexOf("e"); // works fine
}

However, on a map, the same thing does not work. The type of "key" is unknown, so there is no code completion, and calling "indexOf" gives an unresolved symbol warning.

var map : Map<String,String> = ["key" => "value"];
for (key in map.keys()) {
    var index = key.indexOf("e"); // unresolved symbol warning
}

I am not sure if it works on other types of iterators, but it doesn't work on Map.keys() or Map.iterator(), so I assume it's not working for any others.

TIR: STB-7289

Parsing fails for function types with optional arguments

Source line:
typedef SetBodyFunctionArguments = Rectangle -> Int -> NamedTextFormat -> ?TruncationPolicy -> ?String -> ?Bool -> ?Int -> ?Int -> Void;

Parses to:
TYPEDEF_DECLARATION(1435,1505)
PsiElement(typedef)('typedef')(1435,1442)
PsiWhiteSpace(' ')(1442,1443)
COMPONENT_NAME(1443,1467)
IDENTIFIER(1443,1467)
PsiElement(ID)('SetBodyFunctionArguments')(1443,1467)
PsiWhiteSpace(' ')(1467,1468)
PsiElement(=)('=')(1468,1469)
PsiWhiteSpace(' ')(1469,1470)
FUNCTION_TYPE(1470,1505)
FUNCTION_TYPE(1470,1486)
TYPE_OR_ANONYMOUS(1470,1479)
TYPE(1470,1479)
REFERENCE_EXPRESSION(1470,1479)
IDENTIFIER(1470,1479)
PsiElement(ID)('Rectangle')(1470,1479)
PsiWhiteSpace(' ')(1479,1480)
PsiElement(->)('->')(1480,1482)
PsiWhiteSpace(' ')(1482,1483)
TYPE_OR_ANONYMOUS(1483,1486)
TYPE(1483,1486)
REFERENCE_EXPRESSION(1483,1486)
IDENTIFIER(1483,1486)
PsiElement(ID)('Int')(1483,1486)
PsiWhiteSpace(' ')(1486,1487)
PsiElement(->)('->')(1487,1489)
PsiWhiteSpace(' ')(1489,1490)
TYPE_OR_ANONYMOUS(1490,1505)
TYPE(1490,1505)
REFERENCE_EXPRESSION(1490,1505)
IDENTIFIER(1490,1505)
PsiElement(ID)('NamedTextFormat')(1490,1505)
PsiWhiteSpace(' ')(1505,1506)
PsiElement(->)('->')(1506,1508)
PsiWhiteSpace(' ')(1508,1509)
PsiErrorElement: expected, got '?'(1509,1510)
PsiElement(?)('?')(1509,1510)
PsiElement(DUMMY_BLOCK)(1510,1554)
PsiElement(ID)('TruncationPolicy')(1510,1526)
PsiWhiteSpace(' ')(1526,1527)
PsiElement(->)('->')(1527,1529)
PsiWhiteSpace(' ')(1529,1530)
PsiElement(?)('?')(1530,1531)
PsiElement(ID)('String')(1531,1537)
PsiWhiteSpace(' ')(1537,1538)
PsiElement(->)('->')(1538,1540)
PsiWhiteSpace(' ')(1540,1541)
PsiElement(?)('?')(1541,1542)
PsiElement(ID)('Bool')(1542,1546)
PsiWhiteSpace(' ')(1546,1547)
PsiElement(->)('->')(1547,1549)
PsiWhiteSpace(' ')(1549,1550)
PsiElement(?)('?')(1550,1551)
PsiElement(ID)('Int')(1551,1554)
PsiWhiteSpace(' ')(1554,1555)
PsiElement(->)('->')(1555,1557)
PsiWhiteSpace(' ')(1557,1558)
PsiElement(?)('?')(1558,1559)
PsiElement(ID)('Int')(1559,1562)
PsiWhiteSpace(' ')(1562,1563)
PsiElement(->)('->')(1563,1565)
PsiWhiteSpace(' ')(1565,1566)
PsiElement(ID)('Void')(1566,1570)
PsiElement(;)(';')(1570,1571)

TIR: STB-4528

Improve IntelliJ Haxe compiler interpretation of warnings

Currently, within the IDE, the Haxe compiler output is interpreted as WARNINGs. Errors are easily overlooked, and informational information is presented/counted as WARNINGS. We need to classify compiler output correctly and ensure that it is presented correctly through the IDE.
As a possibly separate work item, all errors and warnings containing source code location information (having file and line numbers) should be navigable by clicking and/or selecting the message. (EMB: This currently works for me, though some developers have had issue with it.)

TiVo internal reference: STB-2044

Use Haxe compiler as the completion engine for IDEA

IDEA currently depends upon the FindUsages database for code completion (suggestions). The Haxe compiler itself has been extended to provide completion support, and it’s contextually aware. Make the IDEA plug-in use the Haxe compiler as a completion engine.

TIR: STB-2901

Mulithreading support in debugger is not correct

Currently the multithreading support is only partially implemented. All thread stack frames are reported but attempts to move through stack frames may not work correctly, and variable display will be all wrong (only variables for the "main" thread will be displayed, or maybe the thread that most recently hit a breakpoint; it isn't well tested).

This needs to be completed at some point.

Array literal type inference problems

var array = ["item"];
var index = array[0].charAt(1); // no code completion

The compiler should be able to infer that the array contains Strings, but it doesn't, so there is no code completion. Map literals have the same problems, although it's worse, as explained in #26.

Javascript Debugging

I was never able to get Javascript debugging to work correctly with Haxe's source maps.
Anyone else tried this?

I assume there was more work involved with the Javascript debugger to get this working for the other coffeescript and dart plugins.

Being able to debug with breakpoints for cpp, flash and js targets all from the same codebase and IDE, maybe a first for any language.

Occasional unresolved type error if using full class path without importing the class.

In this example TextFormatAlign is highlighted with red with "Unresolved Type" error. Error goes away once the class is imported.
Surprisingly enough new flash.display.Sprite() and new flash.text.TextField() cause no errors.

var sprite = new flash.display.Sprite();
var textField = new flash.text.TextField();
textField.defaultTextFormat.align = flash.text.TextFormatAlign.CENTER;

Migration to IntelliJ IDEA 14 API

This one is not urgent, it seems like JetBrains works mostly on 14 version and we will have to migrate eventually. It seems like they removed JpsSerialization modules and other jps stuff from API. So it shouldn't be hard to upgrade plugin to work with 14 version. Currently it's in preview, but we might need to consider such possibility in near future.

TIR: STB-2896

Build and run MUnit tests

Build and run MUnit tests. Display the pass/fail results in a rational way.
Automated tests are to be selectable as “Run” or “Debug” targets within the IDE.
Optionally: Auto-generate the wrapper TestSuite Haxe code
(EMB: There is some support for this already, though it may be JUnit instead. The Haxe plug-in itself has a set of unit tests that can be run as described above.)

TIR: STB-1368

Complete refactoring features

Several refactoring features would be very handy to have:
• Pull up, push down
• Extract class
• Extract variable
• Override base class
• Implement missing method stubs
• Generate interface method stubs

TIR: STB-2903

DEA community 13 can't debug haxe

i need your help. i am fresh with hexe. i download idea community 13 as haxe editor.but after i create a openfl project with command lime by commandline.i import in the IDEA,i tried to debug on flash target.but to my surprise, i can't make a debug point on the editor side.the red point didn't appear.then i click the debug icon button, i saw nothing happened after compiled.can anybody help me? i wish you everything goes well. whether the idea 13 community version support for debugging on flash target? if can, how to set?

No completion on abstract field forwarding

See a detailed description of the feature in the Haxe Manual.

@:forward(length) // unresolved symbol
abstract Hello(String) {
    public function new() {
        this = "hello";
    }
}
var hello = new Hello();
hello.length; // unresolved symbol, no completion

In the above example, only the field length should be forwarded and should have completion. You can also write @:forward with no arguments to forward all fields.

TIR: STB-7291

Better handling for ‘@’ and ‘@:’ annotations

The Haxe language has been extended and the IDEA plug-in has not been extended to handle its new features.
Improve IntelliJ Haxe plugin:
• Better handling for @ and @:
(so that they continue with proper compilation even in the face of an error)
EMB Note: This may have already been addressed by ‘as3boyan’ and included in the https://github.com/HaxeIDE/intellij-haxe repository.

TiVo internal reference: STB-2046

Code-aligning wrong behavior for @:metas

Calling autoalign-feature wrong behavior:
It switch from

@:buildXml("&<include name='${haxelib:hx-nanovg}/Build.xml'/>")
class Main...

to

@:buildXml("&<include name='${haxelib:hx - nanovg}/Build.xml'/>")
  • added spaces to hx - nanovg.

For full example look Demo.hx#L9.

TIR: STB-7295

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.