ternjs / tern

A JavaScript code analyzer for deep, cross-editor language support
https://ternjs.net/
MIT License
4.25k stars 378 forks source link

Using `es_modules` and `node` plugin together breaks jump to definition in some cases #1049

Open abose opened 2 years ago

abose commented 2 years ago

Hi,

When trying to enable both es_modules and node plugin together, jump to definition query wont work, but completions requests work if a file is imported without specifying .js extension as described below.

We have the following tern init code in Brackets:

ternOptions = {
        defs: env,
        async: true,
        getFile: getFile,
        plugins: {
            commonjs: true,
            requirejs: {},
            angular: true,
            complete_strings: true,
            doc_comment: true,
            doc_comments: true,
            es_modules: true,
            node: true,
            node_resolve: true
        }
    };

Jump to definition fails in ternjs demo site as well https://ternjs.net/doc/demo/index.html#ES6 if the init for the demo includes node: true, along with the current tern init options in demo.

The issue can be recreated with three files below, fail.js, pass.js and list.js with contents below:

// fail.js
import {test} from "./list"

// pass.js
import {test} from "./list.js"

// list.js
export function test(){}

The problem:

  1. Jump to definition tern query will not work if we try to trigger it from line1: test in fail.js, but it will work from pass.js .
  2. However, completions requests pass for both cases to get code hints.
  3. The problem is not present if i only use es_modules plugin and not node plugin.

expected result

  1. Jump to definition query and completions query should behave the same. But having completions and definitions error tolerant would help with edits.
  2. Should behave consistently with both es_modules plugin and node plugin enabled.

Background reading done

https://stackoverflow.com/questions/55251956/how-does-javascript-import-find-the-module-without-an-extension

Thanks, Arun.