microsoft / microsoft/vscode-cpptools
Computed include go to definition (ctrl+click)
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 6.2k
- Forks
- 1.7k
- Avg merge
- 14h 46m
- Merged PRs (30d)
- 61
Description
Environment
- OS and Version: Windows 10
- VS Code Version: Latest
- C/C++ Extension Version: Latest
- If using SSH remote, specify OS of remote machine:
Bug Summary and Steps to Reproduce
Bug Summary:
I am not sure if this is a bug or intended, but would be a shame if this is intended.
I am investigating using "computed includes" within our project and vscode ctrl+click does not seem to be working on them. The extension properly resolves the defines and the test source file compiles successfully. However, if I try to go directly to an included header file, directly by using ctrl + click, it is inoperable.
Side note. Ctrl + click seems to also not be working on an absolute path.
The power of computed includes comes from being able to use #defines within includes. We want a slight variation that uses directories instead, but the whole slew does not seem to be working.
Steps to reproduce:
- Define test.c with a computed include using a macro (which expands a directory), a 'normal' computed include that uses a computed include directly from a define, an absolute path include, and something that works such as #include <stdint.h>.
- Define c_cpp_properties and add the relevant defies to be used in expansion.
- Try to ctrl + click or go to definition on all of the computed includes and or the include of an absolute path and watch as they do not seem to work but ctrl + click on stdint.h does.
Expected behavior:
The extension properly expands the macros to the correct paths. Ctrl + click should work on the expanded macro used within a define. Ctrl + click should also work on absolute paths.
Note in my examples I am on windows and very explicitly defining all of my paths with forward slash '/', not backslash so that I can be portable. Windows accepts either, but unix only accepts forward slash for path separators.
test.c
c_cpp_properties
macro expand STR(THE_DIR/test.h)
macro expand TEST_H
- Ctrl click / go to definition does not work on lines 1, 3, 5
- Ctrl click / go to definition works on line 7
- Greyed out is my user name
- Compiled test.c using clang, which works successfully
Configuration and Logs
{
"version": 4,
"configurations": [
{
"name": "test",
"cStandard": "c23",
"intelliSenseMode": "clang-arm",
"defines": [
"XSTR(x)=#x",
"STR(x)=XSTR(x)",
"THE_DIR=C:/Users/.../Desktop/New folder",
"TEST_H=\"C:/Users/.../Desktop/New folder/test.h\""
]
}
]
}
replace '...' with my user name
Other Extensions
No response
Additional context
No response
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Reproduce the issue with the mentioned test.c and c_cpp_properties configuration, comparing navigation for computed includes, absolute paths, and stdint.h. Trace the extension's include-navigation entry point and verify that Ctrl+click or go to definition resolves the expanded macro and absolute paths while preserving the working standard-header case.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp, typescript, vscode
- Domain
- devtools
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100