Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve switch header/source matching #2635

Open
sean-mcmanus opened this issue Oct 9, 2018 · 16 comments
Open

Improve switch header/source matching #2635

sean-mcmanus opened this issue Oct 9, 2018 · 16 comments
Assignees
Labels
enhancement Improvement to an existing feature Feature: Switch Header/Source fixed Check the Milestone for the release in which the fix is or will be available. Language Service
Milestone

Comments

@sean-mcmanus
Copy link
Contributor

From #618 (comment)

I have similar issue. I have the following folder structure (simplified)

componentA/tests/inc/TestDataBuilder.h
componentA/tests/src/TestDataBuilder.cpp
componentB/tests/inc/TestDataBuilder.h
componentB/tests/src/TestDataBuilder.cpp

When componentB/tests/inc/TestDataBuilder.h is opened and I press Alt+O, the editor jumps to componentA/tests/src/TestDataBuilder.cpp instead of the source file in componentB. When I press Alt+O a second time, it jumps to componentA/tests/inc/TestDataBuilder.h. It seems that the algorithm simply picks the first header it finds in alphabetical order without considering locality.

@AHKol
Copy link

AHKol commented Oct 28, 2018

I'm new to the vscode-cpptools repo. Since this looks like a good first bug I will give it a shot.

I managed to replicate it already.

@bobbrow
Copy link
Member

bobbrow commented Oct 29, 2018

@AHKol, we appreciate your willingness to help out! Unfortunately this is something that is implemented in our language server which is not open source at this time. The bugs that are fixable by the community will be marked with the "help wanted" label.

@alanbirtles
Copy link

alanbirtles commented May 8, 2019

I'm having similar issues, in my case I have headers with generic names like "Connection.h" "Object.h", when I switch from the cpp file to the header vscode switches to headers with the same name in system libraries (e.g. GCC in the case of Object.h and AWS SDK for Connection.h).
If this issue can't be fully fixed by finding the "nearest" matching file can it at least search workspace files before library files?

@rhaschke
Copy link

rhaschke commented Nov 3, 2019

I have similar issues: Having multiple matching header files found in c_cpp_properties.json's includePath, it seems to pick the last match (instead of the first one).

@kisielk
Copy link

kisielk commented Dec 4, 2019

I'm having trouble getting the switch to work at all, even with filenames like {Src,Inc}/module.{cpp,h}

@bobbrow bobbrow modified the milestones: Triage, Backlog Jan 28, 2021
@SteelBlueVision
Copy link

SteelBlueVision commented Feb 16, 2021

This is absolutely insane, you can't use Alt-O (shortcut for C/C++: Switch Header/Source) to switch from header to source, if the two lie in different directories. This is true even if the directory where source files reside is mentioned in the /configurations/browse/path JSON array in c_cpp_properties.json as (for example) "/complete/absolute/path/to/source_files/*" . It should be noted that all of the source files lie in the aforementioned dir - there are no nested subdirectories in .../source_files, hence the single asterisk was used to not perform a recursive search (not that that would have helped anyways - I've tried it out of desperation).

It's so broken that it can't even go from header to source with Alt-O, if the source is already loaded and present in a tab right next to it in the editor, and these are the only two files that are currently open! It has no trouble going from source to header, though, so clearly it seems some sort of connection between the two.

Note: I am using a .hpp extension for headers and .cpp for source files, if that is helpful.

@sean-mcmanus
Copy link
Contributor Author

@mgoldshteyn This issue is tracking some known limitations with switch header/source in which it'll pick a target with matching name at the unwanted folder, but it sounds like you may be hitting a different issue in which no target is found. Are you able to provide a simple repro? I'm not reproing the issue with the simple repro in this screenshot:

image

@vnen
Copy link

vnen commented Apr 3, 2021

I also have this problem. I'm using src folder for the sources and include for the headers. From include/parser.hpp it correctly open the source file, but from parser.cpp it opens /usr/included/boost/beast/http/parser.hpp instead. It's quite frustrating. Is it really difficult to prefer files in the workspace?

@pettitpeon
Copy link

Any news here? I have the same issue!

@sean-mcmanus
Copy link
Contributor Author

@pettitpeon No news yet, but it looks like the milestone just got changed to "On Deck".

@arookas
Copy link

arookas commented Aug 28, 2022

This has been a recurring problem for me. I have a workspace with API headers + implementation headers with the same filenames, and Alt+O simply never chooses the right ones. It's extremely frustrating.

@sweihub
Copy link

sweihub commented Mar 8, 2023

I also have this frustrating issue, the vscode always switch to a wrong header, how do we priotize an include directory?

@sean-mcmanus
Copy link
Contributor Author

@sweihub There's not currently a way to prioritize an include directory, but you can exclude one via C_Cpp.files.exclude (assuming you don't mind losing global symbols in those files).

@mua
Copy link

mua commented Sep 28, 2023

This is one of those things breaks entire keyboard workflow frequently.

@StefanoPierini
Copy link

Meanwhile, the workaround I found to this issue is to install the extension c-mantic and bind the shortcut to its "Switch Header Source". It seems to work correctly.

@browntarik browntarik moved this to Pull Request in cpptools Jan 4, 2025
@bobbrow bobbrow moved this from Pull Request to Done in cpptools Feb 4, 2025
@sean-mcmanus sean-mcmanus modified the milestones: On Deck, 1.24.0 Feb 7, 2025
@sean-mcmanus sean-mcmanus added fixed Check the Milestone for the release in which the fix is or will be available. enhancement Improvement to an existing feature and removed bug labels Feb 7, 2025
@sean-mcmanus
Copy link
Contributor Author

This is fixed with https://github.com/microsoft/vscode-cpptools/releases/tag/v1.24.0 . If there are additional scenarios that are not fixed still we may open a new issue to track that additional improvement.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement Improvement to an existing feature Feature: Switch Header/Source fixed Check the Milestone for the release in which the fix is or will be available. Language Service
Projects
Status: Done
Development

No branches or pull requests