arduino-language-server
arduino-language-server copied to clipboard
Missing declaration, type definition, and references functionality
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
-
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: https://github.com/arduino/arduino-ide/pull/2027#issuecomment-1538833648
-
Create a sketch with the following content:
enum foo_t {bar}; foo_t baz(); foo_t baz() { return bar; } void setup() { baz(); } 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 the
baz
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 the
baz
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 the
foo_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 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:
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