arduino-language-server icon indicating copy to clipboard operation
arduino-language-server copied to clipboard

Missing declaration, type definition, and references functionality

Open per1234 opened this issue 1 year ago • 0 comments

Describe the problem

The Eclipse Theia IDE framework (as of 1.37.0) includes the following language server-dependent features:

  • Go to Declaration / Peek Declaration
  • Go to Type Definition / Peek Type Definition
  • Go to References / Peek References

🐛 None of these are functional in the Arduino IDE sketch editor.

To reproduce

  1. Start Arduino IDE.

  2. Select File > Advanced > Keyboard Shortcuts from the Arduino IDE menus.

  3. Configure keyboard shortcuts for the following commands:

    • editor.action.revealDeclaration
    • editor.action.goToTypeDefinition
    • editor.action.goToReferences

    Keyboard shortcuts are used in this demo because the editor context menu items for the non-functional language server features were removed from Arduino IDE: https://github.com/arduino/arduino-ide/pull/2027#issuecomment-1538833648

  4. Create a sketch with the following content:

    enum foo_t {bar};
    foo_t baz();
    foo_t baz() {
      return bar;
    }
    void setup() {
      baz();
    }
    void loop() {}
    
  5. Select Tools > Board > Arduino AVR Boards > Arduino Uno from the Arduino IDE menus.

  6. Wait for the the "indexing" process to finish, as indicated at the left side of the status bar.

  7. Place the cursor on the baz function call on line 7 of the sketch editor.

  8. Press the keyboard shortcut for the "editor.action.revealDefinition" command (Ctrl+F12 by default).

  9. Select "Go to Declaration" from the context menu. 🙂 The cursor moves to the baz function definition at line 3 as expected. This step demonstrates that other language server-dependent features are functional.

  10. Place the cursor on the baz function call on line 7.

  11. Press the keyboard shortcut for the "editor.action.revealDeclaration" command 🐛 Nothing happens (expected result is that the cursor would move to the baz function declaration at line 2)

  12. Place the cursor on the foo_t function return type on line 2.

  13. Press the keyboard shortcut for the "editor.action.goToTypeDefinition" command 🐛 Nothing happens (expected result is that the cursor would move to the foo_t type definition at line 1)

  14. Place the cursor on the baz function declaration on line 2.

  15. Press the keyboard shortcut for the "editor.action.goToReferences" command 🐛 Nothing happens (expected result is that a peek would open with all references to baz)

Expected behavior

Arduino Language Server provides Arduino IDE with whatever it needs to make these features functional.

Arduino Language Server version

0.7.4

Arduino CLI version

0.32.2

Operating system

  • Windows
  • Linux
  • macOS

Operating system version

  • Windows 11
  • Ubuntu 22.04
  • macOS Ventura

Additional context

The demo works as expected when using VS Code.


Logs generated by performing the above procedure with the build from arduino/arduino-ide@36e2092:

NonFunctionalLSFeatures.zip

Additional reports

  • https://forum.arduino.cc/t/arduino-extension-for-vscode-being-deprecated/1293983/14

Related

  • https://github.com/arduino/arduino-ide/issues/1394
    • My research and experimentation indicates that the two non-functional language server-dependent features mentioned in that report ("Refactor" and "Source Action") are not implemented for C++ even in the C++ VS Code extensions so that is a different situation from the missing functionality tracked in this issue.
  • https://github.com/arduino/arduino-ide/pull/2027#pullrequestreview-1414246614

Issue checklist

  • [X] I searched for previous reports in the issue tracker
  • [X] I verified the problem still occurs when using the latest nightly build
  • [X] My report contains all necessary details

per1234 avatar May 09 '23 23:05 per1234