Visual Studio Code includePath subdirectories - visual-studio-code

I'm struggling with the includePath setting on a bigger project source.
Let's say I have a folder structure like:
/BaseComponent/public
/BaseComponent/include
/BaseComponent/source
/SubComponent1/public
/SubComponent1/include
/SubComponent1/source
/SubComponent1/SubSubComponent/public
/SubComponent1/SubSubComponent/include
/SubComponent1/SubSubComponent/source
/SubComponent2/public
/SubComponent2/include
/SubComponent2/source
I tried to do a configuration like this:
"includePath": [
...
"${workspaceRoot}",
"${workspaceRoot}/*/include",
"${workspaceRoot}/*/public"
],
But this didn't appear to work out. Is there a way to have just all header inside the workspaceRoot used? Something like "include all subfolder"?
OR another way to define a path which is project in dependend?

I believe this is what you are looking for:
"${workspaceFolder}/**"
Assuming all the dirs are inside your working space folder.

That is not yet possible/supported, as mentioned in Microsoft/vscode-cpptools issue 849.
Example of a context illustrating that issue:
The includePath doesn't seem to work with NuGet packages since the directory name includes the version.
For example, if we use package rapidjson 1.0.2 and later upgrade, we'd have to update references to "packages/rapidjson.1.0.2/build/native/include" in this file - in additional to any packages.config files.
It would be nice if we could use wildcards in directory specifiers or some other means of not having to maintain the same information in two different places.
So the alternative is to version a script able to generate the configuration file by updating the IncludePath section with all include folders found.
Note: issue 849 is actually a duplicate of issue 723, which states (Bob Brown, from Microsoft):
A middle wildcard is not currently supported.
I started a branch that would support this a while ago, but I forget what state it was in and now the branch is out of date.
If anyone wants to get it back in sync with master and finish it, we can consider taking it.
I'll reopen this issue since the original request was not actually addressed.

Related

Custom referenced file from launch.json for Visual Studio Code

we have a project in which there are a number of launch/debug options referenced in the top-level Visual Studio Code's .vscode/launch.json file.
The issue is that this file needs to be edited for custom local debug options so it constantly triggers Git issues when doing a pull (stash etc) and at worst, sometimes gets committed with changes people needed locally. Yes, I know that's what PRs are for but somehow they keep sneaking in...
Unfortunately there are plenty of entries in the launch.json that need to be shared between devs so ignoring it is not an option.
Ideally I'd like to keep launch.json clean and have it reference another file that devs can tinker with and keep that one out of source.
Is there a way to do this or maybe have an approach that amounts to the same thing?
thanks
with the extension Command Variable you can use the command extension.commandvariable.file.content to read parts of a file and use it in your launch config. You can place the file in your .vscode directory and place that file also in your .gitignore.
The file can be a Key-Value text file or a JSON file.

opening vscode to latest directory in specified path

Is it possible to have vscode automatically open the newest folder within a specific path?
For example, with this configuration:
{
"folders": [
{
"path": "\\\\FromABC\\Archive",
"name":"From ABC"
},
{
"path": "\\\\FromXYZ\\Archive",
"name":"From XYZ"
}
]
}
I would expect these folders in the workspace to be pointing to \07\07 because those were created today:
\\\\FromABC\\Archive\\2021\\07\\07
\\\\FromXYZ\\Archive\\2021\\07\\07
Is it possible to create a workspace where the folders are opened to the latest folder within each configured path?
There's not enough information in the original question to fully answer it, however, I can suggest a few avenues of attack
Custom Command (error-prone and picky)
Modify Upstream Process (likely the best overall)
Combining Both (perhaps the best for your immediate case)
Creating a Custom Command
Create a new command per https://code.visualstudio.com/api/extension-guides/command#creating-new-commands
VSCode Commands Listing: https://code.visualstudio.com/api/references/commands
new command
detect latest folder through whatever logic you like
call vscode.openFolder to navigate to it
call your custom command through Activation Events (activationEvents) at either onStartupFinished or * (Start Up; less-preferable, but may be required to avoid confusing the editor)
https://code.visualstudio.com/api/references/activation-events#Start-up
Check out Start app when opening project in VS Code? for a few answers related to this
Modifying the Upstream Process
Cutting the gordian knot, it's likely some process (perhaps a human) is creating the directories for you
Change the upstream process so when it creates the directories, it also creates/updates a link to the directory labeled something like latest
/FromABC/Archive/2021/06/03
/FromABC/Archive/2021/07/05
/FromABC/Archive/2021/07/07
/FromABC/Archive/latest --> /FromABC/Archive/2021/07/07
/FromXYZ/Archive/2020/04/12
/FromXYZ/Archive/2021/08/18
/FromXYZ/Archive/latest --> /FromXYZ/Archive/2021/08/18
Then you can always refer to the latest directory and it will always be correct
This is quite common when something can change frequently, but another process is expecting a static path and/or has no way to know the schedule of change
I don't have any Windows systems to try this out with and you may be able to create a regular shortcut for this .. however, you may need a Junction (soft-link) or Hard Link to convince VSCode that the directory is a real directory
https://learn.microsoft.com/en-us/windows/win32/fileio/hard-links-and-junctions
This also provides an opportunity to include more files, such a beta versions of some software, which it's desirable to package into the same directory structure, but not truly the latest stable!
Combining Both
If your upstream process is either not modifiable (or some manual process it's annoying or error-prone to add extras steps to) you can likely combine both solutions to get what you really want
Use the * Action Event to call a script to detect and create the new directory - create a binary or PowerShell script to make your link
In this and with the upstream change, just point VS Code to the latest directory and it shouldn't mind
Not sure on which platform you are, I assume windows, but essentially similar.
Instead of trying to get VSCode to open the latest folder, I would create a script that updates a softlink for each folder to the latest subfolder in it. Then you can point VSCode to the softlink, which can be updated whenever needed to the latest subfolders.

How do I prevent the .dccache file from being created?

vscode keeps adding a file named .dccache. How can I prevent this?
It messes up the github diffs and I keep on having to add .dccache to the .gitignore for several different projects.
I can't find anything about why .dccache is being created in the first place
It can also be created by the Snyk extension.
I have the same file, I believe this is being created from DeepCode: https://www.deepcode.ai/
This is a code analysis tool to try to find issues. Check if you installed the DeepCode extension in VSCode if you want to get rid of this file, otherwise ignoring it should be fine.
The DeepCode plugins or the CLI is using this file to create a cache for the source code bundles send to the analysis engine. Without this cache, the collection and upload would be very time-consuming.
As it only serves as a caching mechanism, you can exclude it from git uploads and ignore it otherwise.
Snyk extention has a Help&Feedback tab, on the FAQ there is a 'Add custom .dcignore file to your workspace'.
Sometimes git ignore doesn't work for me
I used this file: https://github.com/DeepCodeAI/dcignore/blob/master/full.dcignore.js
just create .dcignore and copy all contents to that. I manually add .dccache and .dcignore just in case.
I had the same issue and when I disabled Snyk extension on VS code editor is disappeared, if you don't have Snyk installed and still have .dccache appearing every now and them, just keep an eye on the other extensions, disable each one at a time and see which one is creating the .dccache file

Installshield - Few files getting removed on major upgrade

I updated an installer file (.ism) for major upgrade in which I made the following changes:
updated product code,
updated package code,
updated versionmin and max in upgrade,
updated product version,
few strings in which old version was mentioned.
Now when I am upgrading my product using this setup, few files get removed automatically.
I did not make any changes in those files in target machine and the same files (no change in content) are in my new setup.
Also I did not add any entry in "RemoveFiles" table to remove them.
Also checked the installation log in which I am just seeing this:
Action 14:14:59: RemoveFiles. Removing files
RemoveFiles: File: CapibilityDemo.htm, Directory: C:\Program Files\Server\Printing\
RemoveFiles: File: HTTP.js, Directory: C:\Program Files\Server\Scripts\OpenLayers\lib\OpenLayers\Protocol\
RemoveFiles: File: Script.js, Directory: C:\Program
Files\Server\Scripts\OpenLayers\lib\OpenLayers\Protocol\
Can anyone please help me in resolving this issue ?
Thanks
Taran
Dynamic components are probably the problem.
This link is someone who was having a similar problem while patching (which is like a minor update)
Basically what is happening is that MSI has determined that the 'old' components have been removed (since they are dynamically generated, the GUIDs change every build). So in your upgrade it is removing the components you 'removed'. However it isn't laying down the new components, likely because it has determined there isn't a need for it to do so. You should examine your MSI file in Orca and look for the files/components that didn't get installed in your upgrade, and then search the install log for that GUID. That should give you a clue as to the next steps.
Also, here is the installshield best practice recommendations for Dynamic file linking.

Best practices for using Hg with Grails?

What should I check in/not check in? Since many of the files are sometimes auto-generated I'm not entirely sure how to handle this using version control...does it have something to do with tags?
For instance in ANT, I know not to check-in my target/bin directories...but Grails adds another level of confusion to this...since some of code is generated and some of it is not.
(It may become clearer as I go...but it seems to be that there needs to be some way of being able to tell what was just generated and what was modified by a developer so that it needs to be placed in version control)
Here's the .hgignore directory I've got on my most recent grails project (with a couple of project specific things taken out):
syntax: glob
out
target
logs
*.iml
.idea
*.iws
*.war
workspace.xml
lib/build
lib/compile
lib/runtime
lib/test
~$*
stacktrace.log
*.tmproj
*.launch
reports/
*.orig
*.zip
.DS_Store
*/.DS_Store
web-app/WEB-INF/classes
cobertura.ser
The generated code in Grails should be placed under version control. It's not secondary executable code that is generated by the build process like class files, but instead is code that is part of your source. The generated code is intended to be just a starting point for your application and will most likely be modified at some point anyway.
Also check this:
http://www.grails.org/Checking+Projects+into+SVN
and this:
https://stackoverflow.com/questions/4201578