Search code examples
eclipsenode.jsjshintjsdtnodeclipse

How to ignore node shebang error in Eclipse?


I am writing some node command line utilities. They all start with the line:

#!/usr/bin/env node

With Eclipse Juno and the Nodeclipse Node.js plugin, this line of code produces an error as shown:

Node shebang eclipse error

OK, so # is not a valid comment character in javascript, but it is a valid character in Linux/UNIX as the shebang of the first line in a file. But how can I set up Eclipse to ignore this error? This is a problem for me because code formatting does not work if you have errors. I have to delete the line. Hit CTRL-SHIFT-F and add the line back.

I have tried a lot of things and researched, but I can't find an answer.

There is a duplicate question out there, eclipse javascript syntax error on hashbang line, but my question has more info.

EDIT:

Looks like there was something added to jshint to allow shebangs in the first line. Maybe I need to update my node-eclipse, or maybe the node-eclipse project needs to update jshint?

  • My jshint eclipse integration is version 0.9.6.
  • My nodeclipse is 0.4.0.20130519...

I upgraded to

  • jshint eclipse integration 0.9.9.20131029
  • nodeclipse 0.7.0.20131101

That did not help.

Here is my JSHint version in eclipse:

enter image description here

EDIT 2:

Thanks for the answer VonC. But I think this shows that I do not have a BOM in the file. Any other ideas?

$ od -N 20 -t x1 hello.js
0000000 23 21 2f 75 73 72 2f 62 69 6e 2f 65 6e 76 20 6e
0000020 6f 64 65 0a
0000024

EDIT 3:

With regard to Paul Verest's answer below, I tried to turn off JSDT validation, but I can't seem to do it. I unchecked "Enable JavaScript semantic validation" (In Eclipse, see Window > Preferences > JavaScript > Validator > Errors/Warnings), but the issue remains.

I am now uninstalling Eclipse Web Developer Tools 3.4.2. That did not seem to help and now my CSS and HTML editors are gone. Now I have tried to disable JSDT validation by following some of the ideas in this SO question, How do I remove javascript validation from my eclipse project?.

So I went into my project properties and went to JavaScript > Validation. I have set everything to "Enabled project specific settings" and unchecked "Errors/Warnings", "JSDOC", etc. Even so, I think validation is still running since the problem persists! My "Builders" Properties only lists the "JSHint Problem Checker" which is enabled. (I am doing all this on a new test project with a hello.js).

EDIT 4, THE ANSWER

It was not easy, but I ended up hacking the .project file in Eclipse. I had this:

<natures>
    <nature>org.nodeclipse.ui.NodeNature</nature>
    <nature>org.eclipse.wst.jsdt.core.jsNature</nature>
</natures>

I removed the jsdt nature and now the error on the shebang line is GONE! I did this in my test project and my real project. It worked! This is actually pretty helpful since I can format the file and I'm actually running jshint now.


Solution

  • There are 2 option for JavaScript validation in Eclipse:

    • JSDT
    • JSHint (default since Nodeclipse 0.7)

    As configration is stored per project, copy .* settings files from project created with 0.7 or re-configure it manually (just compare .* files with newly created project). Then put .jshintrc file like https://github.com/Nodeclipse/nodeclipse-1/blob/master/org.nodeclipse.ui/templates/.jshintrc

    Try to check JSHint options, if it is possible.

    Note that with JSHint usage, ~~this question becomes general JSHint question (not Eclipse or Nodeclipse related).~~

    UPDATE:

    .project content since 0.7 :

    <?xml version="1.0" encoding="UTF-8"?>
    <projectDescription>
        <name>ProjectName</name>
        <comment></comment>
        <projects>
        </projects>
        <buildSpec>
            <buildCommand>
                <name>com.eclipsesource.jshint.ui.builder</name>
                <arguments>
                </arguments>
            </buildCommand>
        </buildSpec>
        <natures>
            <nature>org.nodeclipse.ui.NodeNature</nature>
            <nature>org.eclipse.wst.jsdt.core.jsNature</nature>
        </natures>
    </projectDescription>
    

    As @Jess discovered this was error shown by JSDT, not JSHInt, so removing <nature>org.eclipse.wst.jsdt.core.jsNature</nature> will stop JSDT from displaying it (even with JavaScript semantic validation already turned off since 0.7)

    UPDATE 3:

    Drawback of <nature>org.eclipse.wst.jsdt.core.jsNature</nature> removed will be that code assist and click-though to definition will not work (It actually works in rare cases when JSDocs are defined e.g. http://www.nodeclipse.org/nodejs/javascript/sources/books/2013/10/22/JSDT-require-JSDoc.html or within 1 .js file)

    JSDoc support

    Even click-through to definition click-through to definition