How to use the "Find in Path" options in Intellij? - intellij-idea

There are four "location" options to Find in Path: Project, Module, Directory, and Scope. I would have thought that the most restrictive would be Directory but instead it is the only one I am seeing any results:
Directory
The expected results can be seen by doing a search from the command line in the root of the project:
$find . -name \*.js | xargs grep "n createSTFT(" 2>/dev/null
./js/cough-app-local-audio-file.js:function createSTFT(buffer) {
./js/testOnsets.js:function createSTFT(buffer) {
./js/cough-local-file.headless.js:export function createSTFT(buffer) {
I would expect the remaining types of searches to find all of those results - but instead they find .. nothing ??
Project
Module
All Places
So the only one that makes any sense is Directory .. but even that one is missing results.. What are these options supposed to do and why are they not showing the expected results? I am on Intellij 2019.3.5 Ultimate

Make sure the module was imported with the right type and has the content and/or source roots configured properly. Find in Path will work within the module roots only when you have specified the option to search in a project or in a module.
You can remove the module and add a new one or adjust the roots configuration.

Related

Spacemacs: Search for file in multiple projects

I know I can use "SPC p f" to search for a file in the current project, which means git repository for me. Now, in my current project we have multiple git repos, and I'd like to search for files in all of them. Luckily, they all reside in the same directory (e.g. ~/projects/x/).
Is there a command in Spacemacs that lets me search for files in all the git repos under ~/projects/x?
I believe you can do it with SPC s f. When you activate it:
Prompts you to select a directory to search
Allow you to enter a search string, showing results in the HELM window
In general, SPC s shows all keybindings for general search, where f is for files.
I dug through the available helm commands again and found helm-projects-find-files, which does exactly what I want.
I put this in ~/.spacemacs into the function dotspacemacs/user-config:
(setq-default helm-locate-project-list (list "~/projects"))
(spacemacs/set-leader-keys "fm" 'helm-projects-find-files))
For searching in those files, you can use spacemacs/helm-project-smart-do-search-in-dir:
Put this somewhere in ~/.spacemacs:
(defun mine/search-in-projects ()
"Search in all my projects (i.e. what is checked out in ~/projects)"
(interactive)
(spacemacs/helm-project-smart-do-search-in-dir "~/projects"))
And this in ~/.spacemacs into the function dotspacemacs/user-config:
(spacemacs/set-leader-keys "sm" 'mine/search-in-projects)
(I used SPC-sm as key combination because the project name starts with an "m").
Oh, I just realized I can just put a marker that projectile respects (like a .projectile file) into my ~/projects/x directory. Now I can switch to the ~/projects/x project, and still am able to also narrow it to specific sub-projects by selecting e.g. ~/projects/x/p1/.
So all I needed to do was:
touch ~/projects/.projectile
Update: I realized that when doing this, I can't narrow down to a sub-project. So it's not really the best answer.
You can put this in your .spacemacs to bind SPC p f to search all projects.
(spacemacs/set-leader-keys "pf" 'helm-projectile-find-file-in-known-projects)

How to include .iuml path to generate PlantUML diagram in Doxygen

I'm working on the documentation of a component using Doxygen and I want to include UMLdiagrams in between the text.
I know how to do most of it, as I simply need to copy the .tuml source into my .dox file and run doxygen. However, one of my diagrams is a class diagram that includes other .iuml files, like explained in the PlantUML site.
So, basically, I do:
#mainpage main_page MyDoxygen
\
...
\
#startuml
\
!include iuml_files/Class01.iuml
!include iuml_files/Class02.iuml
\
MainClass <|-- Class01
MainClass <|-- Class02
\
#enduml
Long story short, I don't know how to make Doxygen understand it must look for the .iuml files in the directory (relative path) I'm giving as argument to the include directive.
If I wasn't clear enough as to what I need, please let me know and I will try make it clearer.
Can I please get some help?
I had a similar problem (I own the Word Add-in for plantuml)
You can specify the java property "plantuml.include.path" in the command line :
java -Dplantuml.include.path="c:/mydir" -jar plantuml.jar atest1.txt
(see http://plantuml.sourceforge.net/preprocessing.html)
I expect it'll work when you modify the batch file for calling Plantuml
http://plantuml.sourceforge.net/doxygen.html
I had a similar request for my Word Addin for Plantuml and here it worked.
The Real Answer
Use the PLANTUML_INCLUDE_PATH = ./someRelativeDir configuration, visible in the Doxygen wizard's DOT panel.
The include path is relative to your Doxygen config, ie the starting directory from which the doxygen config is taken.
A Red Herring
I'm leaving the rest of this answer here in case anyone found it previously.
I wrongly reported a bug because I needed new reading glasses and didn't notice a stray character in my path.
This was resolved as not a Doxygen bug
For any interested parties, this is what I saw.
Running PlantUML on generated file /Users/andydent/dev/touchgramdesign/doxygeneratedTG4IM/html/inline_umlgraph_1.pu
Preprocessor Error: Cannot include /Users/andydent/dev/touchgramdesign/doxygeneratedTG4IM/html/handDrawnStyle.iuml
Error line 2 in file: /Users/andydent/dev/touchgramdesign/doxygeneratedTG4IM/html/inline_umlgraph_1.pu
Some diagram description contains errors
error: Problems running PlantUML. Verify that the command 'java -jar "/Library/Java/Extensions/plantuml.jar" -h' works from the command line. Exit code: 1
This is using the configuration setting
PLANTUML_INCLUDE_PATH = ./iumltToCopy
Sharper eyes than mine (at the time) noticed the extra character in the path iuml t ToCopy

How to make /out directory appears in the project (cannot include it)?

I am using IDEA 12. I cannot include /out directory into my project.
I tried Project Structure -> Modules -> MyModule -> Sources and then click on Exclude, but nothing happens. /out directory still remains excluded and red-colored.
Is this a bug or I am doing it wrongly?
Screenshot
I can't deselect Exclude to make folder included.
'Exclude output paths' option on 'Paths' tab relates to the module output path. The project output specified in File | Project Structure | Project | 'Project compiler output' is always excluded. If you really need to include it you can do the following:
Switch to 'Use module compile output path' option on 'Paths' tab for all modules.
Select 'Project' item in the left list and clear 'Project compiler output' field.
Reopen the project.
After that 'out' directory should become visible in the 'Project View'. However I recommend you to exclude actual module output subdirectories in the 'Sources' tab by hand. Otherwise IDEA may rescan and reindex output files generated by the compiler after each compilation and this can lead to performance problems.
It looks like Android specific bug, I've created a new issue, please vote:
IDEA-97776 Output is excluded from the project view regardless the "excluded folders" and "exclude output paths" settings

Cmake script problems find_path

I have put these two lines in my Findglm.cmake file to point to the headers for this header library.
find_path(glm_INCLUDE_DIR NAMES glm.hpp matrix_transform.hpp type_ptr.hpp PATHS
${CMAKE_SOURCE_DIR}/libs/glm-0.9.3.2/glm ${CMAKE_SOURCE_DIR}/libs/glm-0.9.3.2/glm/gtc
${CMAKE_SOURCE_DIR}/libs/glm-0.9.3.2/glm/gtx ${CMAKE_SOURCE_DIR}/libs/glm-0.9.3.2glm/core)
set(glm_INCLUDE_DIRS ${glm_INCLUDE_DIR})
However when I generate my Xcode project it says that it cannot locate matrix_transform.hpp and type_ptr.hpp
I have played around with this some more it appears to only find the first argument I am wondering if I am using find path wrong ?
I am using cmake 2.8.8 darwinports.
The find_path() command returns single directory. In your case, it's the first dir, which contains the first file.
If this glm will be always located in your source dir, it would be sufficient to do
include_directories(${CMAKE_SOURCE_DIR}/libs/glm-0.9.3.2/glm
${CMAKE_SOURCE_DIR}/libs/glm-0.9.3.2/glm/gtc
${CMAKE_SOURCE_DIR}/libs/glm-0.9.3.2/glm/gtx
${CMAKE_SOURCE_DIR}/libs/glm-0.9.3.2/glm/core)
The find_path() is used to determine dir somewhere outside of your project.

Why won't MSBuild build a project with a dot in the name?

The Story So Far
I've got a nice solution with a desktop application project, a few library projects, and a couple of development tools projects (also desktop applications). At the moment, my build server outputs all of the code into one OutputPath. So we end up with
drop-x.y.z\
Company.MainApplication.exe <-- main application
Company.MainApplicationCore.dll <-- libraries
Helper.exe <-- developer tools
Grapher.exe
Parser.exe
... <-- the rest of the output
But, we're growing up and people outside of our team want access to our tools. So I want to organize the output. I decided that what we would want is a different OutputPath per executable project
drop-x.y.z\
Company.MainApplication\
Company.MainApplication.exe <-- main application
Company.MainApplicationCore.dll <-- libraries
... <-- application specific output
Helper\
Helper.exe <-- developer tools
... <-- tool specific output
Grapher\
Grapher.exe
...
Parser\
Parser.exe
...
What I Did
I found this simple command. I like it because it retains all the Solution working-dir context that makes msbuild a pain.
msbuild /target:<ProjectName>
For example, from my solution root as a working directory, I would call
PS> msbuild /target:Helper /property:OutputPath="$pwd\out\Helper"
I'm testing this from PowerShell, so that $pwd resolves to the full path to my working directory, or the Solution root in this case. I get the output I desire.
However, when I run this command
PS> msbuild /target:Company.MainApplication /property:OutputPath="$pwd\out\Company.MainApplication"
I get the following error output (there's no more information, I ran with /verbosity:diagnostic)
The target "Company.MainApplication" does not exist in the project.
What I Need
The command fails on any project with a dot or dots in the name. I tried with many combinations of working directories and properties. I tried several ways of escaping the property values. I also tried running the command from a <Task> in a targets file.
I need to know either
A) How to fix this command to work property
B) How to achieve the same output with minimal friction
Try using an underscore as an escape character for the dot in the target parameter, e.g.
msbuild /target:Company_MainApplication /property:OutputPath="$pwd\out\Company.MainApplication"
Specify the target after the -target: switch in the format :. If the project name contains any of the characters %, $, #, ;, ., (, ), or ', replace them with an _ in the specified target name.
https://learn.microsoft.com/en-us/visualstudio/msbuild/how-to-build-specific-targets-in-solutions-by-using-msbuild-exe?view=vs-2019
Dan Nolan's answer and comments are correct. Just want to supplement the Microsoft documentation.
The /targets: switch is to identify a <Target to run in the project file. You need to supply your .csproj file as a an argument that is not prefixed by a /xx option marker.
You might also want to work based on the .sln file. In that case, you still dont specify the project in the .sln to build in this manner. I'll leave you to search up the correct syntax in case that's what you end up doing.