-
Notifications
You must be signed in to change notification settings - Fork 52
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
RFE: Improve rootDirectory detection #826
Comments
@har7an Have you tried out #823? It changes a lot of the internals in the project detection method. In particular,
Definitely, which ideas do you have in mind? In the case of |
No I haven't, but I can do that of course! Impressive changeset.
One could do something similar to nvim: Walk up the file tree and check, in a pre-defined order, for the existence of special files (i.e. For the time being, I have found this neat fix for nvim users: require("lspconfig").texlab.setup {
-- ...
on_new_config = function(new_config, new_root_dir)
new_config.settings.texlab.rootDirectory = new_root_dir
end,
} |
Yeah, I have thought about this one too. We could extend this list to
For
This should be no problem anymore with #823. Root folder detection is now per document instead of globally.
Sure, that would be awesome. I am particulary interested if there are any regressions that the tests do not catch. The performance should be mostly equal but completion should be much snappier. |
#823 definitely improves performance! Unfortunately, it doesn't resolve the
Sounds reasonable, one of those should surely work. |
I am also having issues with the new version 5.0.0. It seams that
Currently, if I edit So, does the current behavior need improvements? Or, what workaround can I use to achieve what I want? Thanks in advance. |
Transferring a comment from #838 (comment) by @xlucn:
I think your proposal could work as a "more reasonable" default but I'm not sure it will catch all use cases either. It is possible to have multiple Still, I think your approach would work very well as a default.1 Maybe it can be combined with #838 for those rare cases where it would fail. On a related note, I'm not sure if implementing a general, always-correct project detection is even possible. TeX is so flexible in the project structures it allows that a general detection must be very hard at least, if not impossible. Footnotes
|
@leon-richardt thanks for the reply (in both threads) and transferring the comment. I looked at vimtex's strategy of dealing with multi file project. Maybe that's helpful for texlab devs, especially the "Directory scan" section. They seems also to cover the |
This was the usual behavior for version However, it does not work if you compile from another directory. Some people like to use a
In my experience, this approach has worked fine in the past (and it still does;
A simple (and predictable) solution would be the following approach: For each new/changed document, perform the following steps:
Further, we would remove special files like @xlucn @leon-richardt What do you think? |
I don't know how valuable my opinion is as I'm sure you have put much more thought into this than I have. But your suggestion sounds good to me; it would certainly solve my scenario!
I believe this would be a wise decision as well so as not to rely on assumptions about a user's project structure 👍 |
Seems to cover my use case, thanks! Just one thing, if a non-global |
Generally yes, but not always. Consider the @leon-richardt @xlucn I have a created a new PR (#839), which implements the algorithm in #826 (comment). |
Maybe the "non-global" word is not accurate enough. By that I refer to (using texts in latexmk manpage") "the RC file in the current working directory" except "the system RC file" or "the user's RC file". Also, it's similar to (but not entirely) common alg to determine project root based on git repository. The user's home is normally excluded, even if there is a |
Sorry for not responding for so long. I tested #839 and the project root detection works like a charm now for the project I initially discovered this on. :) Good job! |
## [5.5.0] - 2023-04-16 ### Added - Allow optionally passing cursor position to `textDocument/build` request for use in forward search after building. Previously, the server had to guess the cursor position ([#475](latex-lsp/texlab#475)) - Add experimental `texlab.experimental.citationCommands` setting to allow extending the list of citation commands ([#832](latex-lsp/texlab#832)) - Add support for escaping placeholders in build arguments similar to forward search - Allow configuring completion matching algorithm ([#872](latex-lsp/texlab#872)) ### Fixed - Fix regression introduced in `v5.4.2` involving `texlab.cleanArtifacts` command. ## [5.4.2] - 2023-04-11 ### Fixed - Fix memory leak when editing documents over a long time ([#856](latex-lsp/texlab#856)) - Fix parsing parentheses in file paths ([#874](latex-lsp/texlab#874)) ## [5.4.1] - 2023-03-26 ### Fixed - Do not return symbols with empty names (e. g. sections without name) ([#870](latex-lsp/texlab#870)) - Repair `textDocument/formatting` request ([#871](latex-lsp/texlab#871)) ## [5.4.0] - 2023-03-12 ### Added - Add experimental settings to allow extending the list of special environments: - `texlab.experimental.mathEnvironments` - `texlab.experimental.enumEnvironments` - `texlab.experimental.verbatimEnvironments` - Add `texlab.changeEnvironment` workspace command ([#849](latex-lsp/texlab#849)) - Add `texlab.showDependencyGraph` workspace command ### Changed - Do not show caption or section names in label inlay hints ([#858](latex-lsp/texlab#858)) - Include more user-defined commands in command completion ### Fixed - Parse nested `\iffalse` blocks correctly ([#853](latex-lsp/texlab#853)) - Parse commands with multi-byte characters correctly ([#857](latex-lsp/texlab#857)) - Fix checking whether a document can be a root file ## [5.3.0] - 2023-02-25 ### Added - Allow filtering `textDocument/documentSymbols` using regular expressions specified via `texlab.symbols.allowedPatterns` and `texlab.symbols.ignoredPatterns` ([#851](latex-lsp/texlab#851)) ### Fixed - Do not use percent-encoded path when searching for PDF files during forward search ([#848](latex-lsp/texlab#848)) - Always return an empty list of code actions instead of returning "method not found" ([#850](latex-lsp/texlab#850)) ## [5.2.0] - 2023-01-29 ### Added - Include line numbers in build warnings when available ([#840](latex-lsp/texlab#840)) - Add `none` formatter to `texlab.latexFormatter` and `texlab.bibtexFormatter` options to allow disabling formatting ([#846](latex-lsp/texlab#846)) ### Fixed - Concatenate more than two lines of maximum length in build diagnostics ([#842](latex-lsp/texlab#842)) - Apply the correct range of references to labels when renaming ([#841](latex-lsp/texlab#841)) - Use `document` environment to detect root file instead of `\documentclass` ([#845](latex-lsp/texlab#845)) ## [5.1.0] - 2023-01-21 ### Added - Allow manually overriding the root directory using a `texlabroot`/`.texlabroot` marker file. See the wiki for more information. ([#826](latex-lsp/texlab#826), [#838](latex-lsp/texlab#838)) ### Deprecated - Deprecate `texlab.rootDirectory` setting in favor of `.texlabroot` files ### Fixed - Do not use `.git`, `.chktexrc`, `.latexmkrc` files/directories to determine the root directory ([#826](latex-lsp/texlab#826)) - Fix building documents without an explicit root directory ([#837](latex-lsp/texlab#837)) ## [5.0.0] - 2022-12-29 ### Changed - _BREAKING_: `texlab.rootDirectory` is now used as the folder path from which the compiler is executed relative to the main document. By default it is equal to `"."`. For more information, please visit the wiki. - Improve performance of completion by a huge margin due to a faster filtering method used internally - Do not discover project files beyond the provided workspace folders - Try to guess the root directory by checking for files such as `.latexmkrc` or `Tectonic.toml` if `texlab.rootDirectory` is not set ### Fixed - Update positions of reported build diagnostics when editing the affected line - Do not treat links to files as bidirectional by default. This prevents issues where `texlab` ends up compiling the wrong file in projects with shared files ([#806](latex-lsp/texlab#806), [#757](latex-lsp/texlab#757), [#679](latex-lsp/texlab#679)) - Fix coverage of directories which need to be watched for changes ([#502](latex-lsp/texlab#502), [#491](latex-lsp/texlab#491)) - Resolve links of the `import` package correctly - Use `filterText` of completion items when filtering internally ([#829](latex-lsp/texlab#829)) ## [4.3.2] - 2022-11-20 ### Fixed - Do not try to run the TeX engine on package files and fail the build instead ([#801](latex-lsp/texlab#801)) - Handle URIs with URL-encoded drive letters on Windows ([#802](latex-lsp/texlab#802)) - Parse BibTeX entries with unbalanced quotes correctly ([#809](latex-lsp/texlab#809)) - Provide completion for more acronym commands ([#813](latex-lsp/texlab#813)) - Fix parsing acronym definitions ([#813](latex-lsp/texlab#813)) ## [4.3.1] - 2022-10-22 ### Fixed - Do not crash with a stack overflow when trying to load packages with many internal dependencies ([#793](latex-lsp/texlab#793)) - Normalize drive letters of all document URIs - Fix parsing commands that take file paths as arguments ([#789](latex-lsp/texlab#789)) - Use the correct working directory and command line arguments when calling `latexindent` ([#645](latex-lsp/texlab#645)) - Fix publishing to CTAN ## [4.3.0] - 2022-09-25 ### Added - Add inlay hints for `\label{...}` ([#753](latex-lsp/texlab#753)) ### Fixed - Improve accuracy of the error locations reported by the TeX engine ([#738](latex-lsp/texlab#738)) - Reduce number of false positive errors reported by `texlab` ([#745](latex-lsp/texlab#745))
Hello,
First: Thanks for this amazing project!
Second: I'm using texlab with nvim-lspconfig to build a multi-file project with tectonic. My problem is that I do not want to configure the texlab
rootDirectory
setting globally in nvim, because I'm working on multiple documents. However, the root directory detection doesn't work correctly otherwise.I've looked at the code and it seems that when
rootDirectory
isn't defined (None
), it uses a custom fallback in all the necessary locations, which mostly defaults to using the files parent directory. While this allows me to build all files and get diagnostics, it doesn't pick up my customlatexindent
config. Would you be interested in an "improved"rootDirectory
detection, or is this better left to the editors using LSP?The text was updated successfully, but these errors were encountered: