From 328cc6eb536476a95a84cd7de863b32cabc41b0e Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Sun, 22 Jan 2023 03:01:36 +0000 Subject: CTAN sync 202301220301 --- support/texlab/CHANGELOG.md | 18 ++ support/texlab/Cargo.lock | 186 ++++++++++----------- support/texlab/Cargo.toml | 20 +-- support/texlab/src/db/diagnostics.rs | 1 + support/texlab/src/db/discovery.rs | 14 +- support/texlab/src/db/document.rs | 44 ++--- support/texlab/src/db/parse.rs | 8 + support/texlab/src/db/workspace.rs | 49 ++---- support/texlab/src/features/build.rs | 20 ++- support/texlab/src/features/folding.rs | 4 +- support/texlab/src/features/formatting.rs | 2 +- support/texlab/src/features/reference/entry.rs | 5 +- support/texlab/src/features/rename/entry.rs | 2 +- support/texlab/src/server.rs | 10 +- support/texlab/src/tests/fixture.rs | 4 +- .../texlab__tests__issues__issue_707.snap | 2 +- .../texlab/src/tests/text_document/completion.rs | 24 ++- ...t_document__completion__project_resolution.snap | 61 ------- ...ent__completion__project_resolution_import.snap | 61 +++++++ ..._completion__project_resolution_texlabroot.snap | 61 +++++++ support/texlab/src/util/cursor.rs | 2 +- support/texlab/texlab.1 | 8 +- support/texlab/texlab.pdf | Bin 26341 -> 26548 bytes 23 files changed, 352 insertions(+), 254 deletions(-) delete mode 100644 support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__project_resolution.snap create mode 100644 support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__project_resolution_import.snap create mode 100644 support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__project_resolution_texlabroot.snap (limited to 'support') diff --git a/support/texlab/CHANGELOG.md b/support/texlab/CHANGELOG.md index 5b12294b3e..823998dc84 100644 --- a/support/texlab/CHANGELOG.md +++ b/support/texlab/CHANGELOG.md @@ -5,6 +5,24 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [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](https://github.com/latex-lsp/texlab/issues/826), [#838](https://github.com/latex-lsp/texlab/pull/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](https://github.com/latex-lsp/texlab/issues/826)) +- Fix building documents without an explicit root directory ([#837](https://github.com/latex-lsp/texlab/issues/837)) + ## [5.0.0] - 2022-12-29 ### Changed diff --git a/support/texlab/Cargo.lock b/support/texlab/Cargo.lock index 7f205d9514..532a369b42 100644 --- a/support/texlab/Cargo.lock +++ b/support/texlab/Cargo.lock @@ -45,15 +45,15 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.67" +version = "1.0.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7724808837b77f4b4de9d283820f9d98bcf496d5692934b857a2399d31ff22e6" +checksum = "2cb2f989d18dd141ab8ae82f64d1a8cdd37e0840f73a406896cf5e99502fab61" [[package]] name = "arc-swap" -version = "1.5.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "983cd8b9d4b02a6dc6ffa557262eb5858a27a0038ffffe21a0f133eaa819a164" +checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" [[package]] name = "assert_unordered" @@ -104,18 +104,19 @@ dependencies = [ [[package]] name = "bstr" -version = "0.2.17" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223" +checksum = "b45ea9b00a7b3f2988e9a65ad3917e62123c38dba709b666506207be96d1790b" dependencies = [ "memchr", + "serde", ] [[package]] name = "bumpalo" -version = "3.11.1" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "572f695136211188308f16ad2ca5c851a712c464060ae6974944458eb83880ba" +checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" [[package]] name = "cast" @@ -186,13 +187,13 @@ dependencies = [ [[package]] name = "clap" -version = "4.0.29" +version = "4.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d63b9e9c07271b9957ad22c173bae2a4d9a81127680962039296abcd2f8251d" +checksum = "4ec7a4128863c188deefe750ac1d1dfe66c236909f845af04beed823638dc1b2" dependencies = [ "bitflags", "clap_derive", - "clap_lex 0.3.0", + "clap_lex 0.3.1", "is-terminal", "once_cell", "strsim", @@ -201,9 +202,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.0.21" +version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0177313f9f02afc995627906bbd8967e2be069f5261954222dac78290c2b9014" +checksum = "684a277d672e91966334af371f1a7b5833f9aa00b07c84e92fbce95e00208ce8" dependencies = [ "heck", "proc-macro-error", @@ -223,24 +224,23 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d4198f73e42b4936b35b5bb248d81d2b595ecb170da0bac7655c54eedfa8da8" +checksum = "783fe232adfca04f90f56201b26d79682d4cd2625e0bc7290b95123afe558ade" dependencies = [ "os_str_bytes", ] [[package]] name = "console" -version = "0.15.2" +version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c050367d967ced717c04b65d8c619d863ef9292ce0c5760028655a2fb298718c" +checksum = "c3d79fbe8970a77e3e34151cc13d3b3e248aa0faaecb9f6091fa07ebefe5ad60" dependencies = [ "encode_unicode", "lazy_static", "libc", - "terminal_size", - "winapi", + "windows-sys", ] [[package]] @@ -620,9 +620,9 @@ dependencies = [ [[package]] name = "globset" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a1e17342619edbc21a964c2afbeb6c820c6a2560032872f397bb97ea127bd0a" +checksum = "029d74589adefde59de1a0c4f4732695c32805624aec7b68d91503d4dba79afc" dependencies = [ "aho-corasick", "bstr", @@ -753,9 +753,9 @@ dependencies = [ [[package]] name = "insta" -version = "1.23.0" +version = "1.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e48b08a091dfe5b09a6a9688c468fdd5b4396e92ce09e2eb932f0884b02788a4" +checksum = "f6f0f08b46e4379744de2ab67aa8f7de3ffd1da3e275adc41fcc82053ede46ff" dependencies = [ "console", "globset", @@ -780,9 +780,9 @@ dependencies = [ [[package]] name = "io-lifetimes" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46112a93252b123d31a119a8d1a1ac19deac4fac6e0e8b0df58f0d4e5870e63c" +checksum = "e7d6c6f8c91b4b9ed43484ad1a938e393caf35960fce7f82a040497207bd8e9e" dependencies = [ "libc", "windows-sys", @@ -790,9 +790,9 @@ dependencies = [ [[package]] name = "is-terminal" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "927609f78c2913a6f6ac3c27a4fe87f43e2a35367c0c4b0f8265e8f49a104330" +checksum = "28dfb6c8100ccc63462345b67d1bbc3679177c75ee4bf59bf29c8b1d110b8189" dependencies = [ "hermit-abi 0.2.6", "io-lifetimes", @@ -874,9 +874,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.138" +version = "0.2.139" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db6d7e329c562c5dfab7a46a2afabc8b987ab9a4834c9d1ca04dc54c1546cef8" +checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" [[package]] name = "linked-hash-map" @@ -934,9 +934,9 @@ dependencies = [ [[package]] name = "lsp-server" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f70570c1c29cf6654029b8fe201a5507c153f0d85be6f234d471d756bc36775a" +checksum = "68a9b4c78d1c3f35c5864c90e9633377b5f374a4a4983ac64c30b8ae898f9305" dependencies = [ "crossbeam-channel", "log", @@ -1050,19 +1050,19 @@ dependencies = [ [[package]] name = "num_cpus" -version = "1.14.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6058e64324c71e02bc2b150e4f3bc8286db6c83092132ffa3f6b1eab0f9def5" +checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" dependencies = [ - "hermit-abi 0.1.19", + "hermit-abi 0.2.6", "libc", ] [[package]] name = "once_cell" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86f0b0d4bf799edbc74508c1e8bf170ff5f41238e5f8225603ca7caaae2b7860" +checksum = "6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66" [[package]] name = "oorandom" @@ -1088,9 +1088,9 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.5" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ff9f3fef3968a3ec5945535ed654cb38ff72d7495a25619e2247fb15a2ed9ba" +checksum = "ba1ef8814b5c993410bb3adfad7a5ed269563e4a2f90c41f5d85be7fb47133bf" dependencies = [ "cfg-if", "libc", @@ -1107,9 +1107,9 @@ checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" [[package]] name = "pest" -version = "2.5.1" +version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc8bed3549e0f9b0a2a78bf7c0018237a2cdf085eecbbc048e52612438e4e9d0" +checksum = "4257b4a04d91f7e9e6290be5d3da4804dd5784fafde3a497d73eb2b4a158c30a" dependencies = [ "thiserror", "ucd-trie", @@ -1117,9 +1117,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.5.1" +version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdc078600d06ff90d4ed238f0119d84ab5d43dbaad278b0e33a8820293b32344" +checksum = "241cda393b0cdd65e62e07e12454f1f25d57017dcc514b1514cd3c4645e3a0a6" dependencies = [ "pest", "pest_generator", @@ -1127,9 +1127,9 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.5.1" +version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28a1af60b1c4148bb269006a750cff8e2ea36aff34d2d96cf7be0b14d1bed23c" +checksum = "46b53634d8c8196302953c74d5352f33d0c512a9499bd2ce468fc9f4128fa27c" dependencies = [ "pest", "pest_meta", @@ -1140,13 +1140,13 @@ dependencies = [ [[package]] name = "pest_meta" -version = "2.5.1" +version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fec8605d59fc2ae0c6c1aefc0c7c7a9769732017c0ce07f7a9cfffa7b4404f20" +checksum = "0ef4f1332a8d4678b41966bb4cc1d0676880e84183a1ecc3f4b69f03e99c7a51" dependencies = [ "once_cell", "pest", - "sha1", + "sha2", ] [[package]] @@ -1261,18 +1261,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.48" +version = "1.0.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9d89e5dba24725ae5678020bf8f1357a9aa7ff10736b551adbcd3f8d17d766f" +checksum = "6ef7d57beacfaf2d8aee5937dab7b7f28de3cb8b1828479bb5de2a7106f2bae2" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556d0f47a940e895261e77dc200d5eadfc6ef644c179c6f5edfc105e3a2292c8" +checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b" dependencies = [ "proc-macro2", ] @@ -1336,9 +1336,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.7.0" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e076559ef8e241f2ae3479e36f97bd5741c0330689e217ad51ce2c76808b868a" +checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733" dependencies = [ "aho-corasick", "memchr", @@ -1381,9 +1381,9 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustix" -version = "0.36.5" +version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3807b5d10909833d3e9acd1eb5fb988f79376ff10fce42937de71a449c4c588" +checksum = "d4fdebc4b395b7fbb9ab11e462e20ed9051e7b16e42d24042c776eca0ac81b03" dependencies = [ "bitflags", "errno", @@ -1395,9 +1395,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.9" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97477e48b4cf8603ad5f7aaf897467cf42ab4218a38ef76fb14c2d6773a6d6a8" +checksum = "5583e89e108996506031660fe09baa5011b9dd0341b89029313006d1fb508d70" [[package]] name = "ryu" @@ -1452,18 +1452,18 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" [[package]] name = "serde" -version = "1.0.151" +version = "1.0.152" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97fed41fc1a24994d044e6db6935e69511a1153b52c15eb42493b26fa87feba0" +checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.151" +version = "1.0.152" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "255abe9a125a985c05190d687b320c12f9b1f0b99445e608c21ba0782c719ad8" +checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e" dependencies = [ "proc-macro2", "quote", @@ -1472,9 +1472,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.90" +version = "1.0.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8778cc0b528968fe72abec38b5db5a20a70d148116cd9325d2bc5f5180ca3faf" +checksum = "877c235533714907a8c2464236f5c4b2a17262ef1bd71f38f35ea592c8da6883" dependencies = [ "itoa", "ryu", @@ -1512,10 +1512,10 @@ dependencies = [ ] [[package]] -name = "sha1" -version = "0.10.5" +name = "sha2" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" +checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" dependencies = [ "cfg-if", "cpufeatures", @@ -1597,9 +1597,9 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09ee3a69cd2c7e06684677e5629b3878b253af05e4714964204279c6bc02cf0b" +checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" dependencies = [ "proc-macro2", "quote", @@ -1622,31 +1622,21 @@ dependencies = [ [[package]] name = "termcolor" -version = "1.1.3" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" +checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" dependencies = [ "winapi-util", ] -[[package]] -name = "terminal_size" -version = "0.1.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "633c1a546cee861a1a6d0dc69ebeca693bf4296661ba7852b9d21d159e0506df" -dependencies = [ - "libc", - "winapi", -] - [[package]] name = "texlab" -version = "5.0.0" +version = "5.1.0" dependencies = [ "anyhow", "assert_unordered", "chrono", - "clap 4.0.29", + "clap 4.1.1", "criterion", "crossbeam-channel", "dashmap", @@ -1787,9 +1777,9 @@ checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81" [[package]] name = "unicode-bidi" -version = "0.3.8" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" +checksum = "d54675592c1dbefd78cbd98db9bacd89886e1ca50692a0692baefffdeb92dd58" [[package]] name = "unicode-case-mapping" @@ -1971,45 +1961,45 @@ dependencies = [ [[package]] name = "windows_aarch64_gnullvm" -version = "0.42.0" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e" +checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608" [[package]] name = "windows_aarch64_msvc" -version = "0.42.0" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4" +checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7" [[package]] name = "windows_i686_gnu" -version = "0.42.0" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7" +checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640" [[package]] name = "windows_i686_msvc" -version = "0.42.0" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246" +checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605" [[package]] name = "windows_x86_64_gnu" -version = "0.42.0" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf7b1b21b5362cbc318f686150e5bcea75ecedc74dd157d874d754a2ca44b0ed" +checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45" [[package]] name = "windows_x86_64_gnullvm" -version = "0.42.0" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028" +checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463" [[package]] name = "windows_x86_64_msvc" -version = "0.42.0" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5" +checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd" [[package]] name = "yaml-rust" diff --git a/support/texlab/Cargo.toml b/support/texlab/Cargo.toml index 62e487b394..480f16aa94 100644 --- a/support/texlab/Cargo.toml +++ b/support/texlab/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "texlab" description = "LaTeX Language Server" -version = "5.0.0" +version = "5.1.0" license = "GPL-3.0" readme = "README.md" authors = [ @@ -9,7 +9,7 @@ authors = [ "Patrick Förster ", ] edition = "2021" -rust-version = "1.60" +rust-version = "1.64" homepage = "https://github.com/latex-lsp/texlab" repository = "https://github.com/latex-lsp/texlab" documentation = "https://github.com/latex-lsp/texlab" @@ -34,9 +34,9 @@ test = false doctest = false [dependencies] -anyhow = "1.0.66" +anyhow = "1.0.68" chrono = { version = "0.4.23", default-features = false, features = ["std"] } -clap = { version = "4.0.29", features = ["derive"] } +clap = { version = "4.0.32", features = ["derive"] } crossbeam-channel = "0.5.6" dashmap = "5.4.0" dirs = "4.0.0" @@ -51,15 +51,15 @@ isocountry = "0.3.2" itertools = "0.10.5" log = "0.4.17" logos = "0.12.1" -lsp-server = "0.6.0" +lsp-server = "0.7.0" lsp-types = { version = "0.93.2", features = ["proposed"] } notify = "5.0.0" -once_cell = "1.16.0" -regex = "1.7.0" +once_cell = "1.17.0" +regex = "1.7.1" rowan = "0.15.10" rustc-hash = "1.1.0" -serde = "1.0.151" -serde_json = "1.0.90" +serde = "1.0.152" +serde_json = "1.0.91" serde_millis = "0.1.1" serde_regex = "1.1.0" serde_repr = "0.1.10" @@ -80,7 +80,7 @@ package = "salsa-2022" assert_unordered = "0.3.5" criterion = { version = "0.4.0" } env_logger = "0.10.0" -insta = { version = "1.23.0", features = ["glob", "redactions", "json"] } +insta = { version = "1.26.0", features = ["glob", "redactions", "json"] } jod-thread = "0.1.2" [profile.release] diff --git a/support/texlab/src/db/diagnostics.rs b/support/texlab/src/db/diagnostics.rs index 9b6691b873..81ed24fd2e 100644 --- a/support/texlab/src/db/diagnostics.rs +++ b/support/texlab/src/db/diagnostics.rs @@ -116,6 +116,7 @@ pub fn collect(db: &dyn Db, workspace: Workspace) -> FxHashMap {} } } diff --git a/support/texlab/src/db/discovery.rs b/support/texlab/src/db/discovery.rs index 0e1ec314f7..5986fcd888 100644 --- a/support/texlab/src/db/discovery.rs +++ b/support/texlab/src/db/discovery.rs @@ -226,12 +226,16 @@ fn discover_parents(db: &mut dyn Db, workspace: Workspace) -> bool { .flatten() .filter(|entry| entry.file_type().map_or(false, |ty| ty.is_file())) .map(|entry| entry.path()) - .filter(|path| Language::from_path(&path) == Some(Language::Tex)) { - if workspace.lookup_path(db, &path).is_none() { - changed |= workspace - .load(db, &path, Language::Tex, Owner::Server) - .is_some(); + if let Some(language) = Language::from_path(&path) { + let can_be_parent = matches!( + language, + Language::Tex | Language::TexlabRoot | Language::Tectonic + ); + + if can_be_parent && workspace.lookup_path(db, &path).is_none() { + changed |= workspace.load(db, &path, language, Owner::Server).is_some(); + } } } diff --git a/support/texlab/src/db/document.rs b/support/texlab/src/db/document.rs index 186bd06ab3..4ee23a2230 100644 --- a/support/texlab/src/db/document.rs +++ b/support/texlab/src/db/document.rs @@ -1,7 +1,4 @@ -use std::{ - ffi::OsStr, - path::{Path, PathBuf}, -}; +use std::path::{Path, PathBuf}; use lsp_types::Url; use rowan::{TextRange, TextSize}; @@ -9,7 +6,7 @@ use rowan::{TextRange, TextSize}; use crate::{ db::{ diagnostics::Diagnostic, - parse::{BibDocumentData, LogDocumentData, TexDocumentData}, + parse::{BibDocumentData, LogDocumentData, TectonicData, TexDocumentData, TexlabRootData}, }, parser::{parse_bibtex, parse_build_log, parse_latex}, util::line_index::LineIndex, @@ -49,14 +46,6 @@ impl Location { let uri = self.uri(db).join(path).ok()?; Some(Location::new(db, uri)) } - - pub fn into_dir(self, db: &dyn Db) -> Location { - if self.uri(db).path().ends_with("/") { - self.join(db, ".").unwrap() - } else { - self - } - } } #[salsa::input] @@ -84,17 +73,23 @@ pub enum Language { Tex, Bib, Log, + TexlabRoot, + Tectonic, } impl Language { pub fn from_path(path: &Path) -> Option { - path.extension() - .and_then(OsStr::to_str) - .and_then(Self::from_extension) - } + let name = path.file_name()?; + if name.eq_ignore_ascii_case(".texlabroot") || name.eq_ignore_ascii_case("texlabroot") { + return Some(Self::TexlabRoot); + } + + if name.eq_ignore_ascii_case("Tectonic.toml") { + return Some(Self::Tectonic); + } - pub fn from_extension(extension: &str) -> Option { - match extension.to_lowercase().as_str() { + let extname = path.extension()?.to_str()?; + match extname.to_lowercase().as_str() { "tex" | "sty" | "cls" | "def" | "lco" | "aux" | "rnw" => Some(Self::Tex), "bib" | "bibtex" => Some(Self::Bib), "log" => Some(Self::Log), @@ -106,6 +101,7 @@ impl Language { match id { "tex" | "latex" => Some(Self::Tex), "bib" | "bibtex" => Some(Self::Bib), + "texlabroot" => Some(Self::TexlabRoot), _ => None, } } @@ -136,7 +132,7 @@ impl Document { } pub fn directory(self, db: &dyn Db) -> Location { - self.location(db).into_dir(db) + self.location(db).join(db, ".").unwrap() } pub fn ancestor_dirs<'db>(self, db: &'db dyn Db) -> impl Iterator + 'db { @@ -167,6 +163,14 @@ impl Document { let data = LogDocumentData::new(db, parse_build_log(text)); DocumentData::Log(data) } + Language::TexlabRoot => { + let data = TexlabRootData; + DocumentData::TexlabRoot(data) + } + Language::Tectonic => { + let data = TectonicData; + DocumentData::Tectonic(data) + } } } diff --git a/support/texlab/src/db/parse.rs b/support/texlab/src/db/parse.rs index d532c536a3..7187135d52 100644 --- a/support/texlab/src/db/parse.rs +++ b/support/texlab/src/db/parse.rs @@ -40,11 +40,19 @@ pub struct LogDocumentData { pub log: BuildLog, } +#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Hash)] +pub struct TexlabRootData; + +#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Hash)] +pub struct TectonicData; + #[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Hash)] pub enum DocumentData { Tex(TexDocumentData), Bib(BibDocumentData), Log(LogDocumentData), + TexlabRoot(TexlabRootData), + Tectonic(TectonicData), } impl DocumentData { diff --git a/support/texlab/src/db/workspace.rs b/support/texlab/src/db/workspace.rs index b8bdb27f1f..0fb9745b12 100644 --- a/support/texlab/src/db/workspace.rs +++ b/support/texlab/src/db/workspace.rs @@ -11,7 +11,6 @@ use rustc_hash::FxHashSet; use crate::{ db::document::{Document, Location}, distro::FileNameDB, - util::HOME_DIR, Db, Options, }; @@ -154,49 +153,31 @@ impl Workspace { } } -const SPECIAL_ENTRIES: &[&str] = &[ - ".git", - "Tectonic.toml", - ".latexmkrc", - "latexmkrc", - ".chktexrc", - "chktexrc", -]; - #[salsa::tracked] impl Workspace { #[salsa::tracked] pub fn working_dir(self, db: &dyn Db, base_dir: Location) -> Location { - let mut path = self + if let Some(dir) = self .options(db) .root_directory .as_deref() .and_then(|path| path.to_str()) - .or_else(|| { - for dir in base_dir - .path(db) - .as_deref()? - .ancestors() - .skip(1) - .filter(|path| Some(*path) != HOME_DIR.as_deref()) - { - for name in SPECIAL_ENTRIES { - if dir.join(name).exists() { - return Some(dir.to_str()?); - } - } - } - - None - }) - .unwrap_or(".") - .to_string(); - - if !path.ends_with(".") { - path.push('/'); + .and_then(|path| base_dir.join(db, path)) + { + return dir; } - base_dir.join(db, &path).unwrap_or(base_dir) + self.documents(db) + .iter() + .filter(|doc| matches!(doc.language(db), Language::TexlabRoot | Language::Tectonic)) + .filter_map(|doc| doc.location(db).join(db, ".")) + .find(|root_dir| { + base_dir + .uri(db) + .as_str() + .starts_with(root_dir.uri(db).as_str()) + }) + .unwrap_or(base_dir) } #[salsa::tracked] diff --git a/support/texlab/src/features/build.rs b/support/texlab/src/features/build.rs index 645f1e8e0e..69c3a7825c 100644 --- a/support/texlab/src/features/build.rs +++ b/support/texlab/src/features/build.rs @@ -104,12 +104,17 @@ impl Command { .stdin(Stdio::null()) .stdout(Stdio::piped()) .stderr(Stdio::piped()) - .current_dir(self.working_dir) + .current_dir(&self.working_dir) .spawn() { Ok(process) => process, - Err(_) => { - log::error!("Failed to spawn process: {:?}", self.executable); + Err(why) => { + log::error!( + "Failed to spawn process {:?} in directory {}: {}", + self.executable, + self.working_dir.display(), + why + ); return BuildStatus::FAILURE; } }; @@ -127,7 +132,7 @@ impl Command { .recv(&line_receiver, |line| match line { Ok(message) => { let params = LogMessageParams { message, typ }; - client.send_notification::(params).unwrap(); + let _ = client.send_notification::(params); false } Err(_) => true, @@ -170,9 +175,10 @@ fn track_output( ); thread::spawn(move || { - for line in reader.lines() { - sender.send(line.unwrap()).unwrap(); - } + let _ = reader + .lines() + .flatten() + .try_for_each(|line| sender.send(line)); }) } diff --git a/support/texlab/src/features/folding.rs b/support/texlab/src/features/folding.rs index ea26121f3f..153b839f57 100644 --- a/support/texlab/src/features/folding.rs +++ b/support/texlab/src/features/folding.rs @@ -43,7 +43,9 @@ pub fn find_all(db: &dyn Db, uri: &Url) -> Option> { .map(|node| create_range(line_index.line_col_lsp_range(node.text_range()))) .collect() } - DocumentData::Log(_) => return None, + DocumentData::Log(_) | DocumentData::TexlabRoot(_) | DocumentData::Tectonic(_) => { + return None; + } }; Some(foldings) diff --git a/support/texlab/src/features/formatting.rs b/support/texlab/src/features/formatting.rs index 66375bd576..09737777fd 100644 --- a/support/texlab/src/features/formatting.rs +++ b/support/texlab/src/features/formatting.rs @@ -26,6 +26,6 @@ pub fn format_source_code( BibtexFormatter::Texlab => format_bibtex_internal(db, document, options), BibtexFormatter::Latexindent => format_with_latexindent(db, document), }, - Language::Log => None, + Language::Log | Language::TexlabRoot | Language::Tectonic => None, } } diff --git a/support/texlab/src/features/reference/entry.rs b/support/texlab/src/features/reference/entry.rs index 3dfa10da5b..0c8f374cb7 100644 --- a/support/texlab/src/features/reference/entry.rs +++ b/support/texlab/src/features/reference/entry.rs @@ -47,7 +47,10 @@ pub(super) fn find_all_references( results.push(ReferenceResult { document, range }); }); } - DocumentData::Bib(_) | DocumentData::Log(_) => {} + DocumentData::Bib(_) + | DocumentData::Log(_) + | DocumentData::TexlabRoot(_) + | DocumentData::Tectonic(_) => {} }; } diff --git a/support/texlab/src/features/rename/entry.rs b/support/texlab/src/features/rename/entry.rs index 79ee25ac71..67c0388f4f 100644 --- a/support/texlab/src/features/rename/entry.rs +++ b/support/texlab/src/features/rename/entry.rs @@ -58,7 +58,7 @@ pub(super) fn rename(context: &CursorContext) -> Option { .collect(); changes.insert(document, edits); } - DocumentData::Log(_) => {} + DocumentData::Log(_) | DocumentData::TexlabRoot(_) | DocumentData::Tectonic(_) => {} } } diff --git a/support/texlab/src/server.rs b/support/texlab/src/server.rs index 93b35c69c6..fe6f75e74a 100644 --- a/support/texlab/src/server.rs +++ b/support/texlab/src/server.rs @@ -678,9 +678,7 @@ impl Server { let client = self.client.clone(); self.build_internal(uri, move |status| { let result = BuildResult { status }; - client - .send_response(lsp_server::Response::new_ok(id, result)) - .unwrap(); + let _ = client.send_response(lsp_server::Response::new_ok(id, result)); })?; Ok(()) @@ -710,7 +708,7 @@ impl Server { let status = compiler.run(); if forward_search_after { - sender.send(InternalMessage::ForwardSearch(uri)).unwrap(); + let _ = sender.send(InternalMessage::ForwardSearch(uri)); } drop(guard); @@ -727,9 +725,7 @@ impl Server { let client = self.client.clone(); self.forward_search_internal(uri, Some(params.position), move |status| { let result = ForwardSearchResult { status }; - client - .send_response(lsp_server::Response::new_ok(id, result)) - .unwrap(); + let _ = client.send_response(lsp_server::Response::new_ok(id, result)); })?; Ok(()) diff --git a/support/texlab/src/tests/fixture.rs b/support/texlab/src/tests/fixture.rs index b837a9f5b0..fb2a6e6d69 100644 --- a/support/texlab/src/tests/fixture.rs +++ b/support/texlab/src/tests/fixture.rs @@ -15,7 +15,9 @@ enum Line<'a> { } fn parse_line(line: &str) -> Line { - if let Some(name) = line.strip_prefix("%TEX ") { + if let Some(name) = line.strip_prefix("%ROOT ") { + Line::File(name, "texlabroot") + } else if let Some(name) = line.strip_prefix("%TEX ") { Line::File(name, "latex") } else if let Some(name) = line.strip_prefix("%BIB ") { Line::File(name, "bibtex") diff --git a/support/texlab/src/tests/snapshots/texlab__tests__issues__issue_707.snap b/support/texlab/src/tests/snapshots/texlab__tests__issues__issue_707.snap index 1397a08fc0..38e15f8103 100644 --- a/support/texlab/src/tests/snapshots/texlab__tests__issues__issue_707.snap +++ b/support/texlab/src/tests/snapshots/texlab__tests__issues__issue_707.snap @@ -1,6 +1,6 @@ --- source: src/tests/issues.rs -expression: "serde_json::from_value::>(serde_json::json!({}))?.unwrap_or_default()" +expression: "serde_json::from_value::>(serde_json::json!({})).unwrap().unwrap_or_default()" --- Options { root_directory: None, diff --git a/support/texlab/src/tests/text_document/completion.rs b/support/texlab/src/tests/text_document/completion.rs index d4f256cdfb..7524eb2017 100644 --- a/support/texlab/src/tests/text_document/completion.rs +++ b/support/texlab/src/tests/text_document/completion.rs @@ -791,7 +791,7 @@ fn test_user_environment() { } #[test] -fn test_project_resolution() { +fn test_project_resolution_import() { assert_items!(complete( r#" %TEX main.tex @@ -810,3 +810,25 @@ fn test_project_resolution() { "# )); } + +#[test] +fn test_project_resolution_texlabroot() { + assert_items!(complete( + r#" +%TEX src/main.tex +%SRC \documentclass{article} +%SRC \include{src/foo} +%SRC \lipsu +%CUR ^ +%1.1 ^^^^^ + +%TEX src/foo.tex +%SRC \include{src/bar} + +%TEX src/bar.tex +%SRC \usepackage{lipsum} + +%ROOT .texlabroot +"# + )); +} diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__project_resolution.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__project_resolution.snap deleted file mode 100644 index 5ee9c3c207..0000000000 --- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__project_resolution.snap +++ /dev/null @@ -1,61 +0,0 @@ ---- -source: src/tests/text_document/completion.rs -expression: "complete(r#\"\n%TEX main.tex\n%SRC \\documentclass{article}\n%SRC \\import{sub}{sub/sub.tex}\n%SRC \\lipsu\n%CUR ^\n%1.1 ^^^^^\n\n%TEX sub/sub.tex\n%SRC \\input{child.tex}\n\n%TEX sub/child.tex\n%SRC \\usepackage{lipsum}\n\n\"#)" ---- -[ - { - "detail": "lipsum.sty", - "kind": 1, - "label": "lipsum", - "preselect": false, - "sortText": "[sortText]", - "textEdit": { - "range": "[range]", - "newText": "lipsum" - } - }, - { - "detail": "lipsum.sty", - "kind": 1, - "label": "lipsumexp", - "preselect": false, - "sortText": "[sortText]", - "textEdit": { - "range": "[range]", - "newText": "lipsumexp" - } - }, - { - "detail": "lipsum.sty", - "kind": 1, - "label": "LipsumPar", - "preselect": false, - "sortText": "[sortText]", - "textEdit": { - "range": "[range]", - "newText": "LipsumPar" - } - }, - { - "detail": "lipsum.sty", - "kind": 1, - "label": "LipsumProtect", - "preselect": false, - "sortText": "[sortText]", - "textEdit": { - "range": "[range]", - "newText": "LipsumProtect" - } - }, - { - "detail": "lipsum.sty", - "kind": 1, - "label": "LipsumRestoreAll", - "preselect": false, - "sortText": "[sortText]", - "textEdit": { - "range": "[range]", - "newText": "LipsumRestoreAll" - } - } -] diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__project_resolution_import.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__project_resolution_import.snap new file mode 100644 index 0000000000..5ee9c3c207 --- /dev/null +++ b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__project_resolution_import.snap @@ -0,0 +1,61 @@ +--- +source: src/tests/text_document/completion.rs +expression: "complete(r#\"\n%TEX main.tex\n%SRC \\documentclass{article}\n%SRC \\import{sub}{sub/sub.tex}\n%SRC \\lipsu\n%CUR ^\n%1.1 ^^^^^\n\n%TEX sub/sub.tex\n%SRC \\input{child.tex}\n\n%TEX sub/child.tex\n%SRC \\usepackage{lipsum}\n\n\"#)" +--- +[ + { + "detail": "lipsum.sty", + "kind": 1, + "label": "lipsum", + "preselect": false, + "sortText": "[sortText]", + "textEdit": { + "range": "[range]", + "newText": "lipsum" + } + }, + { + "detail": "lipsum.sty", + "kind": 1, + "label": "lipsumexp", + "preselect": false, + "sortText": "[sortText]", + "textEdit": { + "range": "[range]", + "newText": "lipsumexp" + } + }, + { + "detail": "lipsum.sty", + "kind": 1, + "label": "LipsumPar", + "preselect": false, + "sortText": "[sortText]", + "textEdit": { + "range": "[range]", + "newText": "LipsumPar" + } + }, + { + "detail": "lipsum.sty", + "kind": 1, + "label": "LipsumProtect", + "preselect": false, + "sortText": "[sortText]", + "textEdit": { + "range": "[range]", + "newText": "LipsumProtect" + } + }, + { + "detail": "lipsum.sty", + "kind": 1, + "label": "LipsumRestoreAll", + "preselect": false, + "sortText": "[sortText]", + "textEdit": { + "range": "[range]", + "newText": "LipsumRestoreAll" + } + } +] diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__project_resolution_texlabroot.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__project_resolution_texlabroot.snap new file mode 100644 index 0000000000..ecf093e33c --- /dev/null +++ b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__project_resolution_texlabroot.snap @@ -0,0 +1,61 @@ +--- +source: src/tests/text_document/completion.rs +expression: "complete(r#\"\n%TEX src/main.tex\n%SRC \\documentclass{article}\n%SRC \\include{src/foo}\n%SRC \\lipsu\n%CUR ^\n%1.1 ^^^^^\n\n%TEX src/foo.tex\n%SRC \\include{src/bar}\n\n%TEX src/bar.tex\n%SRC \\usepackage{lipsum}\n\n%ROOT .texlabroot\n\"#)" +--- +[ + { + "detail": "lipsum.sty", + "kind": 1, + "label": "lipsum", + "preselect": false, + "sortText": "[sortText]", + "textEdit": { + "range": "[range]", + "newText": "lipsum" + } + }, + { + "detail": "lipsum.sty", + "kind": 1, + "label": "lipsumexp", + "preselect": false, + "sortText": "[sortText]", + "textEdit": { + "range": "[range]", + "newText": "lipsumexp" + } + }, + { + "detail": "lipsum.sty", + "kind": 1, + "label": "LipsumPar", + "preselect": false, + "sortText": "[sortText]", + "textEdit": { + "range": "[range]", + "newText": "LipsumPar" + } + }, + { + "detail": "lipsum.sty", + "kind": 1, + "label": "LipsumProtect", + "preselect": false, + "sortText": "[sortText]", + "textEdit": { + "range": "[range]", + "newText": "LipsumProtect" + } + }, + { + "detail": "lipsum.sty", + "kind": 1, + "label": "LipsumRestoreAll", + "preselect": false, + "sortText": "[sortText]", + "textEdit": { + "range": "[range]", + "newText": "LipsumRestoreAll" + } + } +] diff --git a/support/texlab/src/util/cursor.rs b/support/texlab/src/util/cursor.rs index 5c3758ef46..63579c433c 100644 --- a/support/texlab/src/util/cursor.rs +++ b/support/texlab/src/util/cursor.rs @@ -151,7 +151,7 @@ impl<'db, T> CursorContext<'db, T> { let right = root.token_at_offset(offset).right_biased(); Cursor::new_bib(left, right) } - DocumentData::Log(_) => None, + DocumentData::Log(_) | DocumentData::TexlabRoot(_) | DocumentData::Tectonic(_) => None, }; Some(Self { diff --git a/support/texlab/texlab.1 b/support/texlab/texlab.1 index 25dd817248..edbd84b65c 100644 --- a/support/texlab/texlab.1 +++ b/support/texlab/texlab.1 @@ -1,7 +1,7 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.13. -.TH TEXLAB "1" "December 2022" "texlab 5.0.0" "User Commands" +.TH TEXLAB "1" "January 2023" "texlab 5.1.0" "User Commands" .SH NAME -texlab \- manual page for texlab 5.0.0 +texlab \- manual page for texlab 5.1.0 .SH SYNOPSIS .B texlab [\fI\,OPTIONS\/\fR] @@ -19,7 +19,7 @@ No output printed to stderr Write the logging output to FILE .TP \fB\-h\fR, \fB\-\-help\fR -Print help information +Print help .TP \fB\-V\fR, \fB\-\-version\fR -Print version information +Print version diff --git a/support/texlab/texlab.pdf b/support/texlab/texlab.pdf index b4749920ec..cebcaf4269 100644 Binary files a/support/texlab/texlab.pdf and b/support/texlab/texlab.pdf differ -- cgit v1.2.3