arduino / arduino-language-server

An Arduino Language Server based on Clangd to Arduino code autocompletion
GNU Affero General Public License v3.0
117 stars 11 forks source link

Missing declaration, type definition, and references functionality #156

Open per1234 opened 1 year ago

per1234 commented 1 year ago

Describe the problem

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

πŸ› 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

Operating system version

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

Related

Issue checklist