www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - How to get serve-d to find dub dependencies

reply Renato <renato athaydes.com> writes:
I am trying to use dependencies, so I need dub.

On emacs, the imports from dub libraries cannot be found, even 
though dub can build it fine.

How can I get emacs/serve-d to "see" the libraries added by dub?

I found that dub has a command for letting the compiler know 
about the load paths:

```
dub describe --data=import-paths
```

This shows the correct paths for the project, so perhaps I can 
pass this to serve-d somehow?
Dec 23 2023
parent reply Renato <renato athaydes.com> writes:
On Saturday, 23 December 2023 at 16:13:01 UTC, Renato wrote:
 I am trying to use dependencies, so I need dub.

 On emacs, the imports from dub libraries cannot be found, even 
 though dub can build it fine.

 How can I get emacs/serve-d to "see" the libraries added by dub?

 I found that dub has a command for letting the compiler know 
 about the load paths:

 ```
 dub describe --data=import-paths
 ```

 This shows the correct paths for the project, so perhaps I can 
 pass this to serve-d somehow?
I've managed to kind of hack it by adding the paths to my `.dir-locals.el`: ``` ((nil . ((indent-tabs-mode . nil) (tab-width . 4))) (d-mode . ((compile-command . "dmd -L-ld_classic -run") (eglot-workspace-configuration . (:importPath ("/Users/renato/.dub/packages/console-colors/1.1.1/console-colors/source/")))))) ``` Far from ideal but this makes it half work... it actually shows the definitions in the library now and I can even navigate to the source, but still for some reason the import is shown as an error: ``` Expected 'consolecolors.d' or 'consolecolors/package.d' in one of the following import paths: ``` I believe that's because this is coming from d-mode, not serve-d (as serve-d actually "sees" it now)?! Anyway, would love to know how to get serve-d to automatically detect dub libs. Does the VS Code do that? If it does, this should work also on emacs.
Dec 23 2023
parent Steven Schveighoffer <schveiguy gmail.com> writes:
On Saturday, 23 December 2023 at 16:28:28 UTC, Renato wrote:
 On Saturday, 23 December 2023 at 16:13:01 UTC, Renato wrote:
 I am trying to use dependencies, so I need dub.

 On emacs, the imports from dub libraries cannot be found, even 
 though dub can build it fine.

 How can I get emacs/serve-d to "see" the libraries added by 
 dub?

 I found that dub has a command for letting the compiler know 
 about the load paths:

 ```
 dub describe --data=import-paths
 ```

 This shows the correct paths for the project, so perhaps I can 
 pass this to serve-d somehow?
I've managed to kind of hack it by adding the paths to my `.dir-locals.el`: ``` ((nil . ((indent-tabs-mode . nil) (tab-width . 4))) (d-mode . ((compile-command . "dmd -L-ld_classic -run") (eglot-workspace-configuration . (:importPath ("/Users/renato/.dub/packages/console-colors/1.1.1/console-colors/source/")))))) ``` Far from ideal but this makes it half work... it actually shows the definitions in the library now and I can even navigate to the source, but still for some reason the import is shown as an error: ``` Expected 'consolecolors.d' or 'consolecolors/package.d' in one of the following import paths: ``` I believe that's because this is coming from d-mode, not serve-d (as serve-d actually "sees" it now)?! Anyway, would love to know how to get serve-d to automatically detect dub libs.
dub recently changed how it stores packages. serve-d uses dub as a library to figure this out, so if the dub version serve-d is linked against does not match the version of dub you use to install/build, then it won't find the library includes. Check your version of dub against the version of dub serve-d is building against.
 Does the VS Code do that? If it does, this should work also on 
 emacs.
VS Code has a similar problem if you have a mismatch. The solution is to use the beta/nightly release channel of serve-d if you have a recent compiler. I will note there are some packages that serve-d just can't figure out for imports, because the configuration is done via dflags. -Steve
Dec 24 2023