Configuring VSC clang format with global.clang-format file - visual-studio-code

I basically have a similiar question to this one:
How can i configure clang format without .clang-format file in every workspace?
I'm using the Visual Studio Code editor (version 1.43) with the Clang-Format extension developed by Xaver (https://marketplace.visualstudio.com/items?itemName=xaver.clang-format#overview)
I adjusted the clang extension settings "Clang-format: Executable" option to point to the "clang-format.exe" of my VSC installation.
Furthermore I set "Clang-format: Style" to "file".
My clang-file is currently located inside my projects source folder.
As I want to use my clang settings for every project and don't want to copy the clang file into every project workspace manually (and maybe have to change every single copy later on), I tried to make the extension use a globally located clang-file which is inside the VSCs extention folder.
So my first approach was to relocate the clang-file into the "VSC 1.43\data" directory.
My second attempt was to locate it right inside the extension folder "C:\User\VSC 1.43\data\extensions\xaver.clang-format-1.9.0" where a default file was already present.
Unfortunately both attempts seem not to work. I can invoke the formatting with "Format Document" but another clang file seems to get utilized.
Only if I put the file back into the source code directory, my clang rules are getting utilized correctly.
So basically:
MyProject\SourceCode\clang-file --> Works
VSC\data\clang-file --> Doesn't work
VSC\data\extensions\xaver.clang-format-1.9.0\clang-file --> Doesn't work
Can I tell the extension to search for the clang file inside of the extensions installation directory instead of the current workspace?
Note: I just installed the clang-format extension and adjusted the mentioned extension settings above. I did not tamper with the VSC settings.json.
Thank you in advance and best regards :)
Evox402

As specified in the documentation:
When using -style=file, clang-format for each input file will try to find the .clang-format file located in the closest parent directory of the input file. When the standard input is used, the search is started from the current directory.
Actually I believe it searches for either .clang-format or _clang_format.
This explains:
MyProject\SourceCode\clang-file --> Works
You could move the .clang-format file to MyProject, or any parent directory above that, so that it is shared between projects.

Related

Q: Can I configure VSCode to take a .clang-format file from my home directory?

I want to use the same clang-format file for all my project since I have multiple. But I don't want to have them in every workspace and i already have a clang-format file in my home directory, how can I make this work?
Or is this impossible?
I have already seen this question:
How can i configure clang format without .clang-format file in every workspace?
but my clang-format file is like 80 lines long and I just want to edit the stuff locally on my home without having to change it in vscode as well.
Maybe this will help.
The clang-format -style=file is somewhat misleading.
file is not the path to the file you want but rather tells clang-format to use the .clang-format file it can find within the project folders - going all the way up.
And as VSCode is the case, the C++ extension is using by default the clang-format in the VSCode extensions folder.
Which should make the clang-format to go cd .. until it finds .clang-format in your workspace folder
Set "clang-format.style": "file" property to fix it.

vscode multiroot workspace path environment variable

I am using the multiroot workspace functionality to view source files from my c project along with several external libraries. I am using trying to use cpptools extension for intellisense and other functionality. I would like to set default include paths at the workspace level relative to the .code-workspace file. Using ${workspaceFolder} resolves to the path of the folder containing the viewed file. Is there an environment variable that will always resolve the path of the code-workspace file? Or is the a configuration variable I can set and then use ${config:variable}?
I have tried using variables scoped per workspace as described here: https://code.visualstudio.com/docs/editor/variables-reference#_variables-scoped-per-workspace-folder. But, that did not work either. I could use absolute paths and everything would work fine, but I am trying to keep things portable so other people can check out the repository and simply open the .code-workspace file and have everything set up already.
At the time of the question the cpptools extension did not support the ${workspaceFolder:} syntax for enviroment variables. With the latest update, this is now working.

Disable Auto Generation of .vscode Folder

I often like to use VSCode to quick view some projects to pull snippets from them. However, this leads to a ton of additional .vscode folders being placed on my drive in any folder I use the right-click -> Open with VSCode option.
Is there a way to disable this folder from being created every time vscode loads somewhere new?
This issue was due to the 'C/C++ for Visual Studio Code' extension being outdated.
Upgrading to the latest version of this extension has fixed the problem.
That is not the standard behaviour of VSCode, normally the .vscode only gets generated once there is something like a launch.json put into it. Mind checking what's actually in there?

Eclipse autocomplete not working in some Java files

I have noticed that autocomplete is not working in some of java files in Eclipse.
Also, the files where autocomplete is not working, display a hollow "J" as the icon for the Java file. The files where autocomplete is working, icon for java file is a filled "J"
I am wondering if someone can point out what went wrong all of suddent, why the change in icons and why autocomplete and syntax highlighting is turned-off in the files with a hollow "J" icon?
Thanks.
update
Basically, I was doing what VonC has suggested but Eclipse was not refreshing that it why I was thinking that VonC's suggestion isn't working, after doing a refresh, the problem resolved.
Since this question is highly ranked on Google, I will add a solution to fix general auto complete issue, not for 'hollow J' ones.
Try Window (Windows/Linux) or Eclipse (OS X) -> Preferences -> Java -> Editor -> Content Assist -> Restore Defaults
also
Content Assist -> Advanced -> Restore Defaults
some answers (restore defaults) above do not work for some adt bundle installs as of jan '13.
in those cases, go to
Window -> Preferences -> Java -> Editor -> Content Assist -> Advanced
and tick on the JAVA PROPOSAL options.
In this following picture, MyClass.java has a hollow J, because it is explicitly excluded from the sources to build:
Could you go to the properties of the project, "Java Build Path" Section, "Source" tab and see if some exclusion filter has been set ?
It is usual for instance to define:
**/Test*.java
to exclude at first building any unit-test class (when you have a large set of sources and do not want to be presented with Test classes during auto-completion, or do not want them considered during source searches).
Those with a hollow J aren't part of the build path of the project, so they can't participate in the normal build process and therefore auto-complete won't be enabled for these files (and other Java editor features!). You must add the folders with the Java files to be built to the build path using the 'source path' section of the project properties. This can be accessed by right clicking on a project in the project navigator / package explorer and going to Properties. See http://www.informit.com/articles/article.aspx?p=367962 for details.
Additionally, if the files aren't part of a Java project in the first place, you must create a project and move the files in, or put the files in an existing one. Again, make sure these file are under a source directory as described by that section of the project properties.
(source: teradata.com)
I cope with the issue by deleting the file if autocomplete does not work. Just before copying the source code. Then I have recreated the java file with the same name. Pasted the source code previously copied.
As an addendum to the #VonC answer, make sure that the Java files are part of the Inclusion pattern. I had a case where a build process was creating the project while only including .js files and not the Java files:
You can manually edit the inclusions via the Edit button. In my case, a fix was made to the build script to make it permanent.
Neither Restoring Defaults or my build path (file was already in package directory w/other files where auto-complete was working) fixed problem. Fix for me was to close the file explicitly (right click on file name in tab) and re-open. Interestingly, just re-starting Eclipse didn't work either.
Make sure you have the right directory structure. I believe that:
Hollow J icon beside Java file - will not be build
Normal J icon beside Java file - is a file to be build.
I made a mistake when I created webapp artefact. By default it does not create folder for Java, but for resources. I mistakenly put my sources there.
Have a look - see the difference.
I was able to get this fixed in Visual Studio Code, VSCode but entering crtl-shift-p and typing in clean. When I did that I ran the "Java: Clean Java Language Sever Workspace" command. This fixed my autocomplete issue for me.

Resources check

hey I am frequently uploading my XCode iPhone projects to an svn repository to be build on another machine.
My problem is that when I add resources to my project sometimes I forget to add the resource as relative to the project.
I know one answer is to be more careful (not easy when your tired!) but if there was a way to run a script to check my resource paths are relative when I build and warn me if they are not it would be a great time saver for me.
How would I go about doing this?
Thanks
Chris
You can select all the files in your project and set the Path Type for all of them in one go. While this isn't a script this does save a lot of time over doing the files individually
I think the best approach to script this would be to look in the .xcodeproj file - the file paths are listed in there. If your project is called MyProject you need to open (either by using Show Package Contents in Finder or just the usual cd in Terminal) the MyProject.xcodeproj directory.
In here you'll find a file called project.pbxproj - open this in a editor that won't mess up your formatting and have a peek around the file. If you search for one of your files in the project you should be able to see how Xcode stores references to the project files.
Look for a section named /* Begin PBXFileReference section */. In here all your files are listed, along with where they are relative to the project, e.g.:
... path = Classes/MyClass.h; sourceTree = SOURCE_ROOT
If you can parse this file you should be able to acheive what you want - but remember to back up the file, otherwise you might corrupt your project.
How would it be if you instead write a script that asks the SCM if anything in the project is not committed? For example, think of this scenario
Project Root
Codex
Project.xcodeproj
…
Design
anImage.png
where anImage.png being outside of Codex, where the Xcode project sits (its path starts with a ../). A strong .pbxproj parser would have to support all the variants in which Xcode references files to know exactly if there are stray files.
OTOH, the SCM knows where everything is all the time (you mentioned up-ping to a SVN server), so why not ask it instead.
We have a Ruby script that prints a warning in Xcode’s Build Log if anything in the project is not committed.