Description
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
-
Start Arduino IDE.
-
Select File > Advanced > Keyboard Shortcuts from the Arduino IDE menus.
-
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)
-
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() {}
-
Select Tools > Board > Arduino AVR Boards > Arduino Uno from the Arduino IDE menus.
-
Wait for the the "indexing" process to finish, as indicated at the left side of the status bar.
-
Place the cursor on the
baz
function call on line 7 of the sketch editor. -
Press the keyboard shortcut for the "editor.action.revealDefinition" command (Ctrl+F12 by default).
-
Select "Go to Declaration" from the context menu.
🙂 The cursor moves to thebaz
function definition at line 3 as expected.
ⓘ This step demonstrates that other language server-dependent features are functional. -
Place the cursor on the
baz
function call on line 7. -
Press the keyboard shortcut for the "editor.action.revealDeclaration" command
🐛 Nothing happens (expected result is that the cursor would move to thebaz
function declaration at line 2) -
Place the cursor on the
foo_t
function return type on line 2. -
Press the keyboard shortcut for the "editor.action.goToTypeDefinition" command
🐛 Nothing happens (expected result is that the cursor would move to thefoo_t
type definition at line 1) -
Place the cursor on the
baz
function declaration on line 2. -
Press the keyboard shortcut for the "editor.action.goToReferences" command
🐛 Nothing happens (expected result is that a peek would open with all references tobaz
) -
Select all the code on line 8.
-
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:
Additional reports
- Move selected code to new function arduino-ide#2624
- https://forum.arduino.cc/t/arduino-extension-for-vscode-being-deprecated/1293983/14
Related
- Non-functional language server items in editor context menu arduino-ide#1394
- That issue also mentions the non-functional "Source Action" command. My research and experimentation indicates that is not implemented for C++ even in the C++ VS Code extension so that is a different situation from the missing functionality tracked in this issue.
- chore: Theia 1.37.0 arduino-ide#2027 (review)
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