Skip to content

Missing declaration, type definition, references, and refactor functionality #156

Open
@per1234

Description

@per1234

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
  • Refactor...

🐛 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: chore: Theia 1.37.0 arduino-ide#2027 (comment)

  4. Create a sketch with the following content:

    enum foo_t {bar};
    foo_t baz();
    foo_t baz() {
      return bar;
    }
    void setup() {
      baz();
      if(false) {}
    }
    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)

  16. Select all the code on line 8.

  17. Press the keyboard shortcut for the "Refactor..." command.
    🐛 A tooltip appears: "No refactorings available"

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

Related

Issue checklist

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

Metadata

Metadata

Assignees

Labels

type: imperfectionPerceived defect in any part of project

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions