on 80dd585 help sign in
32 files changed+221−891
since splitsnapshots
unifiedsplit
.github/workflows/release.yml+5−5 Cargo.lock+84−103 README.md+1−1 book/src/configuration.md−1 book/src/generated/lang-support.md+1−2 book/src/languages.md−1 helix-core/src/diagnostic.rs−4 helix-core/src/syntax.rs−2 helix-core/src/transaction.rs+14−73 helix-lsp/Cargo.toml+1−1 helix-lsp/src/client.rs−1 helix-term/src/application.rs+38−80 helix-term/src/commands/dap.rs+2−7 helix-term/src/commands/lsp.rs+1−11 helix-term/src/commands/typed.rs+1 helix-term/src/ui/completion.rs+1−17 helix-term/src/ui/lsp.rs+1−3 helix-term/src/ui/menu.rs+13−34 helix-term/src/ui/popup.rs+7−27 helix-vcs/Cargo.toml+1−1 helix-view/src/document.rs+20−57 helix-view/src/editor.rs+2−23 languages.toml+2−19 logo.svg+1−1 runtime/queries/smali/folds.scm−12 runtime/queries/smali/highlights.scm−216 runtime/queries/smali/indents.scm−31 runtime/queries/smali/injections.scm−2 runtime/queries/smali/locals.scm−42 runtime/themes/horizon-dark.toml−80 runtime/themes/noctis.toml+25−25 runtime/themes/nord.toml−9
.github/workflows/release.yml+5−5
@@ -36,7 +36,7 @@ jobs:
3636 - name: Bundle grammars
3737 run: tar cJf grammars.tar.xz -C runtime/grammars/sources .
3838
39− - uses: actions/upload-artifact@v4
39+ - uses: actions/upload-artifact@v3
4040 with:
4141 name: grammars
4242 path: grammars.tar.xz
@@ -106,7 +106,7 @@ jobs:
106106 uses: actions/checkout@v4
107107
108108 - name: Download grammars
109− uses: actions/download-artifact@v4
109+ uses: actions/download-artifact@v3
110110
111111 - name: Move grammars under runtime
112112 if: "!startsWith(matrix.os, 'windows')"
@@ -220,7 +220,7 @@ jobs:
220220 fi
221221 cp -r runtime dist
222222
223− - uses: actions/upload-artifact@v4
223+ - uses: actions/upload-artifact@v3
224224 with:
225225 name: bins-${{ matrix.build }}
226226 path: dist
@@ -233,7 +233,7 @@ jobs:
233233 - name: Checkout sources
234234 uses: actions/checkout@v4
235235
236− - uses: actions/download-artifact@v4
236+ - uses: actions/download-artifact@v3
237237
238238 - name: Build archive
239239 shell: bash
@@ -288,7 +288,7 @@ jobs:
288288 overwrite: true
289289
290290 - name: Upload binaries as artifact
291− uses: actions/upload-artifact@v4
291+ uses: actions/upload-artifact@v3
292292 if: env.preview == 'true'
293293 with:
294294 name: release
Cargo.lock+84−103
@@ -62,9 +62,9 @@ dependencies = [
6262
6363[[package]]
6464name = "anyhow"
65−version = "1.0.76"
65+version = "1.0.75"
6666source = "registry+https://github.com/rust-lang/crates.io-index"
67−checksum = "59d2a3357dde987206219e78ecfbbb6e8dad06cbb65292758d3270e6254f7355"
67+checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
6868
6969[[package]]
7070name = "arc-swap"
@@ -469,9 +469,9 @@ dependencies = [
469469
470470[[package]]
471471name = "futures-core"
472−version = "0.3.30"
472+version = "0.3.29"
473473source = "registry+https://github.com/rust-lang/crates.io-index"
474−checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d"
474+checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c"
475475
476476[[package]]
477477name = "futures-executor"
@@ -486,15 +486,15 @@ dependencies = [
486486
487487[[package]]
488488name = "futures-task"
489−version = "0.3.30"
489+version = "0.3.29"
490490source = "registry+https://github.com/rust-lang/crates.io-index"
491−checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004"
491+checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2"
492492
493493[[package]]
494494name = "futures-util"
495−version = "0.3.30"
495+version = "0.3.29"
496496source = "registry+https://github.com/rust-lang/crates.io-index"
497−checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48"
497+checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104"
498498dependencies = [
499499 "futures-core",
500500 "futures-task",
@@ -522,9 +522,9 @@ checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e"
522522
523523[[package]]
524524name = "gix"
525−version = "0.57.0"
525+version = "0.56.0"
526526source = "registry+https://github.com/rust-lang/crates.io-index"
527−checksum = "721c7497ab24b665ed5a1eb2b3526936aa60068e61ba260651f7e77c52feec69"
527+checksum = "5b0dcdc9c60d66535897fa40a7ea2a635e72f99456b1d9ae86b7e170e80618cb"
528528dependencies = [
529529 "gix-actor",
530530 "gix-commitgraph",
@@ -563,9 +563,9 @@ dependencies = [
563563
564564[[package]]
565565name = "gix-actor"
566−version = "0.29.0"
566+version = "0.28.1"
567567source = "registry+https://github.com/rust-lang/crates.io-index"
568−checksum = "886014c4865b93ce268f1d3eddd4fd3261242c3f3ee61eb36009f913016a9059"
568+checksum = "2eadca029ef716b4378f7afb19f7ee101fde9e58ba1f1445971315ac866db417"
569569dependencies = [
570570 "bstr",
571571 "btoi",
@@ -577,18 +577,18 @@ dependencies = [
577577
578578[[package]]
579579name = "gix-chunk"
580−version = "0.4.6"
580+version = "0.4.5"
581581source = "registry+https://github.com/rust-lang/crates.io-index"
582−checksum = "2ade37ef69870de0ed966b97c57a3a947a22ff3482a52c3b99b205f77bcb08fb"
582+checksum = "d411ecd9b558b0c20b3252b7e409eec48eabc41d18324954fe526bac6e2db55f"
583583dependencies = [
584584 "thiserror",
585585]
586586
587587[[package]]
588588name = "gix-commitgraph"
589−version = "0.23.0"
589+version = "0.22.1"
590590source = "registry+https://github.com/rust-lang/crates.io-index"
591−checksum = "e7559ea9cefee188cd88b05afcc8e3ef7a3cb4a5c647bccf06b981e591b02b77"
591+checksum = "85a7007ba021f059803afaf6f8a48872422abc20550ac12ede6ddea2936cec36"
592592dependencies = [
593593 "bstr",
594594 "gix-chunk",
@@ -600,9 +600,9 @@ dependencies = [
600600
601601[[package]]
602602name = "gix-config"
603−version = "0.33.0"
603+version = "0.32.1"
604604source = "registry+https://github.com/rust-lang/crates.io-index"
605−checksum = "9c35dc7f9c00a42bbc9cfa1ca2ec0a78ad1b76ff0736d3d35dfd612962244467"
605+checksum = "0341471d55d8676e98b88e121d7065dfa4c9c5acea4b6d6ecdd2846e85cce0c3"
606606dependencies = [
607607 "bstr",
608608 "gix-config-value",
@@ -621,9 +621,9 @@ dependencies = [
621621
622622[[package]]
623623name = "gix-config-value"
624−version = "0.14.2"
624+version = "0.14.1"
625625source = "registry+https://github.com/rust-lang/crates.io-index"
626−checksum = "39f388cb2396aee82d6f460a2e7770659bdf8854e9e5478f7d2b1324a9698284"
626+checksum = "6419db582ea84dfb58c7e7b0af7fd62c808aa14954af2936a33f89b0f4ed018e"
627627dependencies = [
628628 "bitflags 2.4.1",
629629 "bstr",
@@ -634,9 +634,9 @@ dependencies = [
634634
635635[[package]]
636636name = "gix-date"
637−version = "0.8.2"
637+version = "0.8.1"
638638source = "registry+https://github.com/rust-lang/crates.io-index"
639−checksum = "9d85f4a01e0d05c3de585e28bae514d4baf01655e3fc3f14ce6f30bf62405345"
639+checksum = "468dfbe411f335f01525a1352271727f8e7772075a93fa747260f502086b30be"
640640dependencies = [
641641 "bstr",
642642 "itoa",
@@ -646,9 +646,9 @@ dependencies = [
646646
647647[[package]]
648648name = "gix-diff"
649−version = "0.39.0"
649+version = "0.38.0"
650650source = "registry+https://github.com/rust-lang/crates.io-index"
651−checksum = "ac0e75f5afd2f6c47c800b6b0a000a08045739d0450d20482e8faa42543f62d1"
651+checksum = "8119a985887cfe68f4bdf92e51bd64bc758a73882d82fcfc03ebcb164441c85d"
652652dependencies = [
653653 "bstr",
654654 "gix-hash",
@@ -658,9 +658,9 @@ dependencies = [
658658
659659[[package]]
660660name = "gix-discover"
661−version = "0.28.0"
661+version = "0.27.0"
662662source = "registry+https://github.com/rust-lang/crates.io-index"
663−checksum = "f0b63ce2ad81632ac1a84ac370f85a5e580c3261580bd85ea17ff35d3a0bba18"
663+checksum = "6fad89416ebe0b3b7df78464124e2a02417b6cd3743d48ad93df86f4d2929c07"
664664dependencies = [
665665 "bstr",
666666 "dunce",
@@ -673,9 +673,9 @@ dependencies = [
673673
674674[[package]]
675675name = "gix-features"
676−version = "0.37.0"
676+version = "0.36.1"
677677source = "registry+https://github.com/rust-lang/crates.io-index"
678−checksum = "befe7edea299a824504b5acc96d7a3a538125b38c42f3a8379f6912a29c90c81"
678+checksum = "4d46a4a5c6bb5bebec9c0d18b65ada20e6517dbd7cf855b87dd4bbdce3a771b2"
679679dependencies = [
680680 "crc32fast",
681681 "flate2",
@@ -691,18 +691,18 @@ dependencies = [
691691
692692[[package]]
693693name = "gix-fs"
694−version = "0.9.0"
694+version = "0.8.1"
695695source = "registry+https://github.com/rust-lang/crates.io-index"
696−checksum = "007017ce93b819ea52c0ec68306f7d72212a2d307c3d70f1548c7141c015d0a1"
696+checksum = "20e86eb040f5776a5ade092282e51cdcad398adb77d948b88d17583c2ae4e107"
697697dependencies = [
698698 "gix-features",
699699]
700700
701701[[package]]
702702name = "gix-glob"
703−version = "0.15.0"
703+version = "0.14.1"
704704source = "registry+https://github.com/rust-lang/crates.io-index"
705−checksum = "61fb116c2516d3a1170e010118f639944a6389872c875a008960cdab2a44ac72"
705+checksum = "5db19298c5eeea2961e5b3bf190767a2d1f09b8802aeb5f258e42276350aff19"
706706dependencies = [
707707 "bitflags 2.4.1",
708708 "bstr",
@@ -712,9 +712,9 @@ dependencies = [
712712
713713[[package]]
714714name = "gix-hash"
715−version = "0.14.0"
715+version = "0.13.3"
716716source = "registry+https://github.com/rust-lang/crates.io-index"
717−checksum = "c52c3170a17b6031833cd2eb4ad7bc23f2755d06e6e70f78dec21d42e8fe1b30"
717+checksum = "1f8cf8c2266f63e582b7eb206799b63aa5fa68ee510ad349f637dfe2d0653de0"
718718dependencies = [
719719 "faster-hex",
720720 "thiserror",
@@ -722,9 +722,9 @@ dependencies = [
722722
723723[[package]]
724724name = "gix-hashtable"
725−version = "0.5.0"
725+version = "0.4.1"
726726source = "registry+https://github.com/rust-lang/crates.io-index"
727−checksum = "40a838e6366a5e5b84668b6997ce0981b833136468e8ba949f424c0ef2927eba"
727+checksum = "feb61880816d7ec4f0b20606b498147d480860ddd9133ba542628df2f548d3ca"
728728dependencies = [
729729 "gix-hash",
730730 "hashbrown 0.14.3",
@@ -733,9 +733,9 @@ dependencies = [
733733
734734[[package]]
735735name = "gix-lock"
736−version = "12.0.0"
736+version = "11.0.0"
737737source = "registry+https://github.com/rust-lang/crates.io-index"
738−checksum = "6cf112ddee94223c119a8534dad027740dc3aba3365ac5edeef8a7f6660c74db"
738+checksum = "f4feb1dcd304fe384ddc22edba9dd56a42b0800032de6537728cea2f033a4f37"
739739dependencies = [
740740 "gix-tempfile",
741741 "gix-utils",
@@ -744,9 +744,9 @@ dependencies = [
744744
745745[[package]]
746746name = "gix-macros"
747−version = "0.1.2"
747+version = "0.1.1"
748748source = "registry+https://github.com/rust-lang/crates.io-index"
749−checksum = "fc207b64189cf71bcb17fc841ab99a5d63d0845546b611e2703ce467f659323a"
749+checksum = "02a5bcaf6704d9354a3071cede7e77d366a5980c7352e102e2c2f9b645b1d3ae"
750750dependencies = [
751751 "proc-macro2",
752752 "quote",
@@ -755,9 +755,9 @@ dependencies = [
755755
756756[[package]]
757757name = "gix-object"
758−version = "0.40.0"
758+version = "0.39.0"
759759source = "registry+https://github.com/rust-lang/crates.io-index"
760−checksum = "e4c77e47ffba92127faf632a841fce23d19547e269bd8b88e68961a70eab4e93"
760+checksum = "febf79c5825720c1c63fe974c7bbe695d0cb54aabad73f45671c60ce0e501e33"
761761dependencies = [
762762 "bstr",
763763 "btoi",
@@ -774,9 +774,9 @@ dependencies = [
774774
775775[[package]]
776776name = "gix-odb"
777−version = "0.56.0"
777+version = "0.55.0"
778778source = "registry+https://github.com/rust-lang/crates.io-index"
779−checksum = "a3254f2005cc7553ea78e85e816a09150c6f7a64e6b7627b8d1fdc56721bea73"
779+checksum = "1fae5f971540c99c6ecc8d4368ecc9d18a9dc8b9391025c68c4399747dc93bac"
780780dependencies = [
781781 "arc-swap",
782782 "gix-date",
@@ -793,9 +793,9 @@ dependencies = [
793793
794794[[package]]
795795name = "gix-pack"
796−version = "0.46.0"
796+version = "0.45.0"
797797source = "registry+https://github.com/rust-lang/crates.io-index"
798−checksum = "02ebc8cd657eec207d82d8f876ca402361308ecd3c87a47935b0299506257b4f"
798+checksum = "4569491c92446fddf373456ff360aff9a9effd627b40a70f2d7914dcd75a3205"
799799dependencies = [
800800 "clru",
801801 "gix-chunk",
@@ -813,9 +813,9 @@ dependencies = [
813813
814814[[package]]
815815name = "gix-path"
816−version = "0.10.2"
816+version = "0.10.1"
817817source = "registry+https://github.com/rust-lang/crates.io-index"
818−checksum = "10931652a3da126990ac93bce1b1c600cc99d7c268d712b6360ed52174ce1b68"
818+checksum = "d86d6fac2fabe07b67b7835f46d07571f68b11aa1aaecae94fe722ea4ef305e1"
819819dependencies = [
820820 "bstr",
821821 "gix-trace",
@@ -826,9 +826,9 @@ dependencies = [
826826
827827[[package]]
828828name = "gix-quote"
829−version = "0.4.9"
829+version = "0.4.8"
830830source = "registry+https://github.com/rust-lang/crates.io-index"
831−checksum = "6c43530cb94a7759807e6f8d180e17ac9c65673b891645c6c433831dc0cf4342"
831+checksum = "4f84845efa535468bc79c5a87b9d29219f1da0313c8ecf0365a5daa7e72786f2"
832832dependencies = [
833833 "bstr",
834834 "btoi",
@@ -837,9 +837,9 @@ dependencies = [
837837
838838[[package]]
839839name = "gix-ref"
840−version = "0.40.0"
840+version = "0.39.0"
841841source = "registry+https://github.com/rust-lang/crates.io-index"
842−checksum = "baa951b3b850d6d1be4f900768e49af20b76bf9505beac22af723d57249a2f1d"
842+checksum = "1ac23ed741583c792f573c028785db683496a6dfcd672ec701ee54ba6a77e1ff"
843843dependencies = [
844844 "gix-actor",
845845 "gix-date",
@@ -858,9 +858,9 @@ dependencies = [
858858
859859[[package]]
860860name = "gix-refspec"
861−version = "0.21.0"
861+version = "0.20.0"
862862source = "registry+https://github.com/rust-lang/crates.io-index"
863−checksum = "88c61f849d58c06e3068a0b601cf10127d2a07cdad00a725ed66cf303f76f6b3"
863+checksum = "76d9d3b82e1ee78fc0dc1c37ea5ea76c2dbc73f407db155f0dfcea285e583bee"
864864dependencies = [
865865 "bstr",
866866 "gix-hash",
@@ -872,9 +872,9 @@ dependencies = [
872872
873873[[package]]
874874name = "gix-revision"
875−version = "0.25.0"
875+version = "0.24.0"
876876source = "registry+https://github.com/rust-lang/crates.io-index"
877−checksum = "bcbbf91f4200c5c76802ef5f057b96f5a336827508881fe55a780be71a794d22"
877+checksum = "fe5dd51710ce5434bc315ea30394fab483c5377276494edd79222b321a5a9544"
878878dependencies = [
879879 "bstr",
880880 "gix-date",
@@ -888,9 +888,9 @@ dependencies = [
888888
889889[[package]]
890890name = "gix-revwalk"
891−version = "0.11.0"
891+version = "0.10.0"
892892source = "registry+https://github.com/rust-lang/crates.io-index"
893−checksum = "33ab66354d83f70f2730391747d0c75f94ef3c3dd40ebde2e206db9faaf7a0a7"
893+checksum = "69d4ed2493ca94a475fdf147138e1ef8bab3b6ebb56abf3d9bda1c05372ec1dd"
894894dependencies = [
895895 "gix-commitgraph",
896896 "gix-date",
@@ -903,21 +903,21 @@ dependencies = [
903903
904904[[package]]
905905name = "gix-sec"
906−version = "0.10.2"
906+version = "0.10.1"
907907source = "registry+https://github.com/rust-lang/crates.io-index"
908−checksum = "a9963f38a42144253ed4d571882d7db5ef644c12e6726e4b75135597cc9d0e1a"
908+checksum = "a36ea2c5907d64a9b4b5d3cc9f430e6c30f0509646b5e38eb275ca57c5bf29e2"
909909dependencies = [
910910 "bitflags 2.4.1",
911911 "gix-path",
912912 "libc",
913− "windows 0.52.0",
913+ "windows",
914914]
915915
916916[[package]]
917917name = "gix-tempfile"
918−version = "12.0.0"
918+version = "11.0.0"
919919source = "registry+https://github.com/rust-lang/crates.io-index"
920−checksum = "e76a494bd530e1a1309188ff971825a24f159c76c2db0bf71fa5dfb469a2c915"
920+checksum = "05cc2205cf10d99f70b96e04e16c55d4c7cf33efc151df1f793e29fd12a931f8"
921921dependencies = [
922922 "gix-fs",
923923 "libc",
@@ -928,15 +928,15 @@ dependencies = [
928928
929929[[package]]
930930name = "gix-trace"
931−version = "0.1.5"
931+version = "0.1.4"
932932source = "registry+https://github.com/rust-lang/crates.io-index"
933−checksum = "bda62acb44dd86a40c7c3762a5403cfc1ac789ea559df54085cedf79864f809e"
933+checksum = "b686a35799b53a9825575ca3f06481d0a053a409c4d97ffcf5ddd67a8760b497"
934934
935935[[package]]
936936name = "gix-traverse"
937−version = "0.36.0"
937+version = "0.35.0"
938938source = "registry+https://github.com/rust-lang/crates.io-index"
939−checksum = "8661fab39985c9214e56d81a63ceb5886ac948cec2fba76c39494d1e0e307ea8"
939+checksum = "df2112088122a0206592c84fbd42020db63b2ccaed66a0293779f2e5fbf80474"
940940dependencies = [
941941 "gix-commitgraph",
942942 "gix-date",
@@ -950,9 +950,9 @@ dependencies = [
950950
951951[[package]]
952952name = "gix-url"
953−version = "0.26.0"
953+version = "0.25.2"
954954source = "registry+https://github.com/rust-lang/crates.io-index"
955−checksum = "10a0129c1e8b52736d7c5128300a4485dbc85863001371e2771ac1754bd89fd7"
955+checksum = "0c427a1a11ccfa53a4a2da47d9442c2241deee63a154bc15cc14b8312fbc4005"
956956dependencies = [
957957 "bstr",
958958 "gix-features",
@@ -964,18 +964,18 @@ dependencies = [
964964
965965[[package]]
966966name = "gix-utils"
967−version = "0.1.7"
967+version = "0.1.6"
968968source = "registry+https://github.com/rust-lang/crates.io-index"
969−checksum = "ab9277a5e32e85d53f738096d872a4a9b76067ad471894ad31bd99c8fa2da1dc"
969+checksum = "9f82c41937f00e15a1f6cb0b55307f0ca1f77f4407ff2bf440be35aa688c6a3e"
970970dependencies = [
971971 "fastrand",
972972]
973973
974974[[package]]
975975name = "gix-validate"
976−version = "0.8.2"
976+version = "0.8.1"
977977source = "registry+https://github.com/rust-lang/crates.io-index"
978−checksum = "f805ebbdbaa4bfd98e2ee43e6d14099b8a4d9141f5d7b8202fea4d48e44263e7"
978+checksum = "75b7d8e4274be69f284bbc7e6bb2ccf7065dbcdeba22d8c549f2451ae426883f"
979979dependencies = [
980980 "bstr",
981981 "thiserror",
@@ -1286,7 +1286,7 @@ dependencies = [
12861286 "iana-time-zone-haiku",
12871287 "js-sys",
12881288 "wasm-bindgen",
1289− "windows 0.48.0",
1289+ "windows",
12901290]
12911291
12921292[[package]]
@@ -1434,9 +1434,9 @@ checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
14341434
14351435[[package]]
14361436name = "lsp-types"
1437−version = "0.95.0"
1437+version = "0.94.1"
14381438source = "registry+https://github.com/rust-lang/crates.io-index"
1439−checksum = "158c1911354ef73e8fe42da6b10c0484cb65c7f1007f28022e847706c1ab6984"
1439+checksum = "c66bfd44a06ae10647fe3f8214762e9369fd4248df1350924b4ef9e770a85ea1"
14401440dependencies = [
14411441 "bitflags 1.3.2",
14421442 "serde",
@@ -1624,9 +1624,9 @@ dependencies = [
16241624
16251625[[package]]
16261626name = "prodash"
1627−version = "28.0.0"
1627+version = "26.2.2"
16281628source = "registry+https://github.com/rust-lang/crates.io-index"
1629−checksum = "744a264d26b88a6a7e37cbad97953fa233b94d585236310bcbc88474b4092d79"
1629+checksum = "794b5bf8e2d19b53dcdcec3e4bba628e20f5b6062503ba89281fa7037dd7bbcf"
16301630
16311631[[package]]
16321632name = "pulldown-cmark"
@@ -2028,18 +2028,18 @@ dependencies = [
20282028
20292029[[package]]
20302030name = "thiserror"
2031−version = "1.0.52"
2031+version = "1.0.51"
20322032source = "registry+https://github.com/rust-lang/crates.io-index"
2033−checksum = "83a48fd946b02c0a526b2e9481c8e2a17755e47039164a86c4070446e3a4614d"
2033+checksum = "f11c217e1416d6f036b870f14e0413d480dbf28edbee1f877abaf0206af43bb7"
20342034dependencies = [
20352035 "thiserror-impl",
20362036]
20372037
20382038[[package]]
20392039name = "thiserror-impl"
2040−version = "1.0.52"
2040+version = "1.0.51"
20412041source = "registry+https://github.com/rust-lang/crates.io-index"
2042−checksum = "e7fbe9b594d6568a6a1443250a7e67d80b74e1e96f6d1715e1e21cc1888291d3"
2042+checksum = "01742297787513b79cf8e29d1056ede1313e2420b7b3b15d0a768b4921f549df"
20432043dependencies = [
20442044 "proc-macro2",
20452045 "quote",
@@ -2101,9 +2101,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
21012101
21022102[[package]]
21032103name = "tokio"
2104−version = "1.35.1"
2104+version = "1.35.0"
21052105source = "registry+https://github.com/rust-lang/crates.io-index"
2106−checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104"
2106+checksum = "841d45b238a16291a4e1584e61820b8ae57d696cc5015c459c229ccc6990cc1c"
21072107dependencies = [
21082108 "backtrace",
21092109 "bytes",
@@ -2384,25 +2384,6 @@ dependencies = [
23842384 "windows-targets 0.48.0",
23852385]
23862386
2387−[[package]]
2388−name = "windows"
2389−version = "0.52.0"
2390−source = "registry+https://github.com/rust-lang/crates.io-index"
2391−checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be"
2392−dependencies = [
2393− "windows-core",
2394− "windows-targets 0.52.0",
2395−]
2396−
2397−[[package]]
2398−name = "windows-core"
2399−version = "0.52.0"
2400−source = "registry+https://github.com/rust-lang/crates.io-index"
2401−checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9"
2402−dependencies = [
2403− "windows-targets 0.52.0",
2404−]
2405−
24062387[[package]]
24072388name = "windows-sys"
24082389version = "0.45.0"
README.md+1−1
@@ -18,7 +18,7 @@
1818
1919![Screenshot](./screenshot.png)
2020
21−A [Kakoune](https://github.com/mawww/kakoune) / [Neovim](https://github.com/neovim/neovim) inspired editor, written in Rust.
21+A Kakoune / Neovim inspired editor, written in Rust.
2222
2323The editing model is very heavily based on Kakoune; during development I found
2424myself agreeing with most of Kakoune's design decisions.
book/src/configuration.md−1
@@ -65,7 +65,6 @@ Its settings will be merged with the configuration directory `config.toml` and t
6565| `workspace-lsp-roots` | Directories relative to the workspace root that are treated as LSP roots. Should only be set in `.helix/config.toml` | `[]` |
6666| `default-line-ending` | The line ending to use for new documents. Can be `native`, `lf`, `crlf`, `ff`, `cr` or `nel`. `native` uses the platform's native line ending (`crlf` on Windows, otherwise `lf`). | `native` |
6767| `insert-final-newline` | Whether to automatically insert a trailing line-ending on write if missing | `true` |
68−| `popup-border` | Draw border around `popup`, `menu`, `all`, or `none` | `none` |
6968| `indent-heuristic` | How the indentation for a newly inserted line is computed: `simple` just copies the indentation level from the previous line, `tree-sitter` computes the indentation based on the syntax tree and `hybrid` combines both approaches. If the chosen heuristic is not available, a different one will be used as a fallback (the fallback order being `hybrid` -> `tree-sitter` -> `simple`). | `hybrid`
7069
7170### `[editor.statusline]` Section
book/src/generated/lang-support.md+1−2
@@ -11,7 +11,7 @@
1111| blueprint | ✓ | | | `blueprint-compiler` |
1212| c | ✓ | ✓ | ✓ | `clangd` |
1313| c-sharp | ✓ | ✓ | | `OmniSharp` |
14−| cabal | | | | `haskell-language-server-wrapper` |
14+| cabal | | | | |
1515| cairo | ✓ | ✓ | ✓ | `cairo-language-server` |
1616| capnp | ✓ | | ✓ | |
1717| clojure | ✓ | | | `clojure-lsp` |
@@ -148,7 +148,6 @@
148148| scheme | ✓ | | ✓ | |
149149| scss | ✓ | | | `vscode-css-language-server` |
150150| slint | ✓ | | ✓ | `slint-lsp` |
151−| smali | ✓ | | ✓ | |
152151| smithy | ✓ | | | `cs` |
153152| sml | ✓ | | | |
154153| solidity | ✓ | | | `solc` |
book/src/languages.md−1
@@ -69,7 +69,6 @@ These configuration keys are available:
6969| `soft-wrap` | [editor.softwrap](./configuration.md#editorsoft-wrap-section)
7070| `text-width` | Maximum line length. Used for the `:reflow` command and soft-wrapping if `soft-wrap.wrap-at-text-width` is set, defaults to `editor.text-width` |
7171| `workspace-lsp-roots` | Directories relative to the workspace root that are treated as LSP roots. Should only be set in `.helix/config.toml`. Overwrites the setting of the same name in `config.toml` if set. |
72−| `persistent-diagnostic-sources` | An array of LSP diagnostic sources assumed unchanged when the language server resends the same set of diagnostics. Helix can track the position for these diagnostics internally instead. Useful for diagnostics that are recomputed on save.
7372
7473### File-type detection and the `file-types` key
7574
helix-core/src/diagnostic.rs−4
@@ -39,10 +39,6 @@ pub enum DiagnosticTag {
3939#[derive(Debug, Clone)]
4040pub struct Diagnostic {
4141 pub range: Range,
42− // whether this diagnostic ends at the end of(or inside) a word
43− pub ends_at_word: bool,
44− pub starts_at_word: bool,
45− pub zero_width: bool,
4642 pub line: usize,
4743 pub message: String,
4844 pub severity: Option<Severity>,
helix-core/src/syntax.rs−2
@@ -155,8 +155,6 @@ pub struct LanguageConfiguration {
155155 /// Hardcoded LSP root directories relative to the workspace root, like `examples` or `tools/fuzz`.
156156 /// Falling back to the current working directory if none are configured.
157157 pub workspace_lsp_roots: Option<Vec<PathBuf>>,
158− #[serde(default)]
159− pub persistent_diagnostic_sources: Vec<String>,
160158}
161159
162160#[derive(Debug, PartialEq, Eq, Hash)]
helix-core/src/transaction.rs+14−73
@@ -1,7 +1,7 @@
11use ropey::RopeSlice;
22use smallvec::SmallVec;
33
4−use crate::{chars::char_is_word, Range, Rope, Selection, Tendril};
4+use crate::{Range, Rope, Selection, Tendril};
55use std::{borrow::Cow, iter::once};
66
77/// (from, to, replacement)
@@ -23,30 +23,6 @@ pub enum Operation {
2323pub enum Assoc {
2424 Before,
2525 After,
26− /// Acts like `After` if a word character is inserted
27− /// after the position, otherwise acts like `Before`
28− AfterWord,
29− /// Acts like `Before` if a word character is inserted
30− /// before the position, otherwise acts like `After`
31− BeforeWord,
32−}
33−
34−impl Assoc {
35− /// Whether to stick to gaps
36− fn stay_at_gaps(self) -> bool {
37− !matches!(self, Self::BeforeWord | Self::AfterWord)
38− }
39−
40− fn insert_offset(self, s: &str) -> usize {
41− let chars = s.chars().count();
42− match self {
43− Assoc::After => chars,
44− Assoc::AfterWord => s.chars().take_while(|&c| char_is_word(c)).count(),
45− // return position before inserted text
46− Assoc::Before => 0,
47− Assoc::BeforeWord => chars - s.chars().rev().take_while(|&c| char_is_word(c)).count(),
48− }
49− }
5026}
5127
5228#[derive(Debug, Default, Clone, PartialEq, Eq)]
@@ -439,6 +415,8 @@ impl ChangeSet {
439415 map!(|pos, _| (old_end > pos).then_some(new_pos), i);
440416 }
441417 Insert(s) => {
418+ let ins = s.chars().count();
419+
442420 // a subsequent delete means a replace, consume it
443421 if let Some((_, Delete(len))) = iter.peek() {
444422 iter.next();
@@ -446,13 +424,13 @@ impl ChangeSet {
446424 old_end = old_pos + len;
447425 // in range of replaced text
448426 map!(
449− |pos, assoc: Assoc| (old_end > pos).then(|| {
427+ |pos, assoc| (old_end > pos).then(|| {
450428 // at point or tracking before
451− if pos == old_pos && assoc.stay_at_gaps() {
429+ if pos == old_pos || assoc == Assoc::Before {
452430 new_pos
453431 } else {
454432 // place to end of insert
455− new_pos + assoc.insert_offset(s)
433+ new_pos + ins
456434 }
457435 }),
458436 i
@@ -460,15 +438,20 @@ impl ChangeSet {
460438 } else {
461439 // at insert point
462440 map!(
463− |pos, assoc: Assoc| (old_pos == pos).then(|| {
441+ |pos, assoc| (old_pos == pos).then(|| {
464442 // return position before inserted text
465− new_pos + assoc.insert_offset(s)
443+ if assoc == Assoc::Before {
444+ new_pos
445+ } else {
446+ // after text
447+ new_pos + ins
448+ }
466449 }),
467450 i
468451 );
469452 }
470453
471− new_pos += s.chars().count();
454+ new_pos += ins;
472455 }
473456 }
474457 old_pos = old_end;
@@ -901,48 +884,6 @@ mod test {
901884 let mut positions = [4, 2];
902885 cs.update_positions(positions.iter_mut().map(|pos| (pos, Assoc::After)));
903886 assert_eq!(positions, [4, 2]);
904− // stays at word boundary
905− let cs = ChangeSet {
906− changes: vec![
907− Retain(2), // <space><space>
908− Insert(" ab".into()),
909− Retain(2), // cd
910− Insert("de ".into()),
911− ],
912− len: 4,
913− len_after: 10,
914− };
915− assert_eq!(cs.map_pos(2, Assoc::BeforeWord), 3);
916− assert_eq!(cs.map_pos(4, Assoc::AfterWord), 9);
917− let cs = ChangeSet {
918− changes: vec![
919− Retain(1), // <space>
920− Insert(" b".into()),
921− Delete(1), // c
922− Retain(1), // d
923− Insert("e ".into()),
924− Delete(1), // <space>
925− ],
926− len: 5,
927− len_after: 7,
928− };
929− assert_eq!(cs.map_pos(1, Assoc::BeforeWord), 2);
930− assert_eq!(cs.map_pos(3, Assoc::AfterWord), 5);
931− let cs = ChangeSet {
932− changes: vec![
933− Retain(1), // <space>
934− Insert("a".into()),
935− Delete(2), // <space>b
936− Retain(1), // d
937− Insert("e".into()),
938− Delete(1), // f
939− Retain(1), // <space>
940− ],
941− len: 5,
942− len_after: 7,
943− };
944− assert_eq!(cs.map_pos(2, Assoc::BeforeWord), 1);
945− assert_eq!(cs.map_pos(4, Assoc::AfterWord), 4);
946887 }
947888
948889 #[test]
helix-lsp/Cargo.toml+1−1
@@ -22,7 +22,7 @@ futures-executor = "0.3"
2222futures-util = { version = "0.3", features = ["std", "async-await"], default-features = false }
2323globset = "0.4.14"
2424log = "0.4"
25−lsp-types = { version = "0.95" }
25+lsp-types = { version = "0.94" }
2626serde = { version = "1.0", features = ["derive"] }
2727serde_json = "1.0"
2828thiserror = "1.0"
helix-lsp/src/client.rs−1
@@ -667,7 +667,6 @@ impl Client {
667667 version: Some(String::from(VERSION_AND_GIT_HASH)),
668668 }),
669669 locale: None, // TODO
670− work_done_progress_params: lsp::WorkDoneProgressParams::default(),
671670 };
672671
673672 self.request::<lsp::request::Initialize>(params).await
helix-term/src/application.rs+38−80
@@ -1,7 +1,6 @@
11use arc_swap::{access::Map, ArcSwap};
22use futures_util::Stream;
33use helix_core::{
4− chars::char_is_word,
54 diagnostic::{DiagnosticTag, NumberOrString},
65 path::get_relative_path,
76 pos_at_coords, syntax, Selection,
@@ -718,7 +717,7 @@ impl Application {
718717 ));
719718 }
720719 }
721− Notification::PublishDiagnostics(mut params) => {
720+ Notification::PublishDiagnostics(params) => {
722721 let path = match params.uri.to_file_path() {
723722 Ok(path) => path,
724723 Err(_) => {
@@ -732,69 +731,31 @@ impl Application {
732731 return;
733732 }
734733 let offset_encoding = language_server.offset_encoding();
735− // have to inline the function because of borrow checking...
736− let doc = self.editor.documents.values_mut()
737− .find(|doc| doc.path().map(|p| p == &path).unwrap_or(false))
738− .filter(|doc| {
739− if let Some(version) = params.version {
740− if version != doc.version() {
741− log::info!("Version ({version}) is out of date for {path:?} (expected ({}), dropping PublishDiagnostic notification", doc.version());
742− return false;
743− }
734+ let doc = self.editor.document_by_path_mut(&path).filter(|doc| {
735+ if let Some(version) = params.version {
736+ if version != doc.version() {
737+ log::info!("Version ({version}) is out of date for {path:?} (expected ({}), dropping PublishDiagnostic notification", doc.version());
738+ return false;
744739 }
745− true
746− });
740+ }
741+
742+ true
743+ });
747744
748745 if let Some(doc) = doc {
749− let lang_conf = doc.language.clone();
750− let text = doc.text().clone();
751−
752− let mut unchaged_diag_sources_ = Vec::new();
753− if let Some(lang_conf) = &lang_conf {
754− if let Some(old_diagnostics) =
755− self.editor.diagnostics.get(&params.uri)
756− {
757− if !lang_conf.persistent_diagnostic_sources.is_empty() {
758− // Sort diagnostics first by severity and then by line numbers.
759− // Note: The `lsp::DiagnosticSeverity` enum is already defined in decreasing order
760− params
761− .diagnostics
762− .sort_unstable_by_key(|d| (d.severity, d.range.start));
763− }
764− for source in &lang_conf.persistent_diagnostic_sources {
765− let new_diagnostics = params
766− .diagnostics
767− .iter()
768− .filter(|d| d.source.as_ref() == Some(source));
769− let old_diagnostics = old_diagnostics
770− .iter()
771− .filter(|(d, d_server)| {
772− *d_server == server_id
773− && d.source.as_ref() == Some(source)
774− })
775− .map(|(d, _)| d);
776− if new_diagnostics.eq(old_diagnostics) {
777− unchaged_diag_sources_.push(source.clone())
778− }
779− }
780− }
781− }
746+ let lang_conf = doc.language_config();
747+ let text = doc.text();
782748
783− let unchaged_diag_sources = &unchaged_diag_sources_;
784− let diagnostics =
785− params.diagnostics.iter().filter_map(move |diagnostic| {
749+ let diagnostics = params
750+ .diagnostics
751+ .iter()
752+ .filter_map(|diagnostic| {
786753 use helix_core::diagnostic::{Diagnostic, Range, Severity::*};
787754 use lsp::DiagnosticSeverity;
788755
789− if diagnostic.source.as_ref().map_or(false, |source| {
790− unchaged_diag_sources.contains(source)
791− }) {
792− return None;
793− }
794−
795756 // TODO: convert inside server
796757 let start = if let Some(start) = lsp_pos_to_pos(
797− &text,
758+ text,
798759 diagnostic.range.start,
799760 offset_encoding,
800761 ) {
@@ -805,13 +766,14 @@ impl Application {
805766 };
806767
807768 let end = if let Some(end) =
808− lsp_pos_to_pos(&text, diagnostic.range.end, offset_encoding)
769+ lsp_pos_to_pos(text, diagnostic.range.end, offset_encoding)
809770 {
810771 end
811772 } else {
812773 log::warn!("lsp position out of bounds - {:?}", diagnostic);
813774 return None;
814775 };
776+
815777 let severity =
816778 diagnostic.severity.map(|severity| match severity {
817779 DiagnosticSeverity::ERROR => Error,
@@ -824,7 +786,7 @@ impl Application {
824786 ),
825787 });
826788
827− if let Some(lang_conf) = &lang_conf {
789+ if let Some(lang_conf) = lang_conf {
828790 if let Some(severity) = severity {
829791 if severity < lang_conf.diagnostic_severity {
830792 return None;
@@ -863,17 +825,8 @@ impl Application {
863825 Vec::new()
864826 };
865827
866− let ends_at_word = start != end
867− && end != 0
868− && text.get_char(end - 1).map_or(false, char_is_word);
869− let starts_at_word = start != end
870− && text.get_char(start).map_or(false, char_is_word);
871−
872828 Some(Diagnostic {
873829 range: Range { start, end },
874− ends_at_word,
875− starts_at_word,
876− zero_width: start == end,
877830 line: diagnostic.range.start.line as usize,
878831 message: diagnostic.message.clone(),
879832 severity,
@@ -883,33 +836,38 @@ impl Application {
883836 data: diagnostic.data.clone(),
884837 language_server_id: server_id,
885838 })
886− });
839+ })
840+ .collect();
887841
888− doc.replace_diagnostics(diagnostics, unchaged_diag_sources, server_id);
842+ doc.replace_diagnostics(diagnostics, server_id);
889843 }
890844
891− let diagnostics = params.diagnostics.into_iter().map(|d| (d, server_id));
845+ let mut diagnostics = params
846+ .diagnostics
847+ .into_iter()
848+ .map(|d| (d, server_id))
849+ .collect();
892850
893851 // Insert the original lsp::Diagnostics here because we may have no open document
894852 // for diagnosic message and so we can't calculate the exact position.
895853 // When using them later in the diagnostics picker, we calculate them on-demand.
896− let diagnostics = match self.editor.diagnostics.entry(params.uri) {
854+ match self.editor.diagnostics.entry(params.uri) {
897855 Entry::Occupied(o) => {
898856 let current_diagnostics = o.into_mut();
899857 // there may entries of other language servers, which is why we can't overwrite the whole entry
900858 current_diagnostics.retain(|(_, lsp_id)| *lsp_id != server_id);
901− current_diagnostics.extend(diagnostics);
902− current_diagnostics
859+ current_diagnostics.append(&mut diagnostics);
903860 // Sort diagnostics first by severity and then by line numbers.
861+ // Note: The `lsp::DiagnosticSeverity` enum is already defined in decreasing order
862+ current_diagnostics
863+ .sort_unstable_by_key(|(d, _)| (d.severity, d.range.start));
864+ }
865+ Entry::Vacant(v) => {
866+ diagnostics
867+ .sort_unstable_by_key(|(d, _)| (d.severity, d.range.start));
868+ v.insert(diagnostics);
904869 }
905− Entry::Vacant(v) => v.insert(diagnostics.collect()),
906870 };
907−
908− // Sort diagnostics first by severity and then by line numbers.
909− // Note: The `lsp::DiagnosticSeverity` enum is already defined in decreasing order
910− diagnostics.sort_unstable_by_key(|(d, server_id)| {
911− (d.severity, d.range.start, *server_id)
912− });
913871 }
914872 Notification::ShowMessage(params) => {
915873 log::warn!("unhandled window/showMessage: {:?}", params);
helix-term/src/commands/dap.rs+2−7
@@ -8,7 +8,7 @@ use dap::{StackFrame, Thread, ThreadStates};
88use helix_core::syntax::{DebugArgumentValue, DebugConfigCompletion, DebugTemplate};
99use helix_dap::{self as dap, Client};
1010use helix_lsp::block_on;
11−use helix_view::{editor::Breakpoint, graphics::Margin};
11+use helix_view::editor::Breakpoint;
1212
1313use serde_json::{to_value, Value};
1414use tokio_stream::wrappers::UnboundedReceiverStream;
@@ -581,12 +581,7 @@ pub fn dap_variables(cx: &mut Context) {
581581 }
582582
583583 let contents = Text::from(tui::text::Text::from(variables));
584− let margin = if cx.editor.popup_border() {
585− Margin::all(1)
586− } else {
587− Margin::none()
588− };
589− let popup = Popup::new("dap-variables", contents).margin(margin);
584+ let popup = Popup::new("dap-variables", contents);
590585 cx.replace_or_push_layer("dap-variables", popup);
591586}
592587
helix-term/src/commands/lsp.rs+1−11
@@ -23,7 +23,6 @@ use helix_core::{
2323use helix_view::{
2424 document::{DocumentInlayHints, DocumentInlayHintsId, Mode},
2525 editor::Action,
26− graphics::Margin,
2726 theme::Style,
2827 Document, View,
2928};
@@ -745,16 +744,7 @@ pub fn code_action(cx: &mut Context) {
745744 });
746745 picker.move_down(); // pre-select the first item
747746
748− let margin = if editor.menu_border() {
749− Margin::vertical(1)
750− } else {
751− Margin::none()
752− };
753−
754− let popup = Popup::new("code-action", picker)
755− .with_scrollbar(false)
756− .margin(margin);
757−
747+ let popup = Popup::new("code-action", picker).with_scrollbar(false);
758748 compositor.replace_or_push("code-action", popup);
759749 };
760750
helix-term/src/commands/typed.rs+1
@@ -574,6 +574,7 @@ fn set_line_ending(
574574
575575 Ok(())
576576}
577+
577578fn earlier(
578579 cx: &mut compositor::Context,
579580 args: &[Cow<str>],
helix-term/src/ui/completion.rs+1−17
@@ -2,7 +2,6 @@ use crate::compositor::{Component, Context, Event, EventResult};
22use helix_view::{
33 document::SavePoint,
44 editor::CompleteAction,
5− graphics::Margin,
65 theme::{Modifier, Style},
76 ViewId,
87};
@@ -327,18 +326,9 @@ impl Completion {
327326 }
328327 };
329328 });
330−
331− let margin = if editor.menu_border() {
332− Margin::vertical(1)
333− } else {
334− Margin::none()
335− };
336−
337329 let popup = Popup::new(Self::ID, menu)
338330 .with_scrollbar(false)
339− .ignore_escape_key(true)
340− .margin(margin);
341−
331+ .ignore_escape_key(true);
342332 let mut completion = Self {
343333 popup,
344334 start_offset,
@@ -579,12 +569,6 @@ impl Component for Completion {
579569 // clear area
580570 let background = cx.editor.theme.get("ui.popup");
581571 surface.clear_with(doc_area, background);
582−
583− if cx.editor.popup_border() {
584− use tui::widgets::{Block, Borders, Widget};
585− Widget::render(Block::default().borders(Borders::ALL), doc_area, surface);
586− }
587−
588572 markdown_doc.render(doc_area, surface, cx);
589573 }
590574}
helix-term/src/ui/lsp.rs+1−3
@@ -92,9 +92,7 @@ impl Component for SignatureHelp {
9292 Some(doc) => Markdown::new(doc.clone(), Arc::clone(&self.config_loader)),
9393 };
9494 let sig_doc = sig_doc.parse(Some(&cx.editor.theme));
95− let sig_doc_area = area
96− .clip_top(sig_text_area.height + 2)
97− .clip_bottom(u16::from(cx.editor.popup_border()));
95+ let sig_doc_area = area.clip_top(sig_text_area.height + 2);
9896 let sig_doc_para = Paragraph::new(sig_doc)
9997 .wrap(Wrap { trim: false })
10098 .scroll((cx.scroll.unwrap_or_default() as u16, 0));
helix-term/src/ui/menu.rs+13−34
@@ -7,18 +7,11 @@ use crate::{
77use helix_core::fuzzy::MATCHER;
88use nucleo::pattern::{Atom, AtomKind, CaseMatching};
99use nucleo::{Config, Utf32Str};
10−use tui::{
11− buffer::Buffer as Surface,
12− widgets::{Block, Borders, Table, Widget},
13−};
10+use tui::{buffer::Buffer as Surface, widgets::Table};
1411
1512pub use tui::widgets::{Cell, Row};
1613
17−use helix_view::{
18− editor::SmartTabConfig,
19− graphics::{Margin, Rect},
20− Editor,
21−};
14+use helix_view::{editor::SmartTabConfig, graphics::Rect, Editor};
2215use tui::layout::Constraint;
2316
2417pub trait Item: Sync + Send + 'static {
@@ -329,15 +322,6 @@ impl<T: Item + 'static> Component for Menu<T> {
329322 let selected = theme.get("ui.menu.selected");
330323 surface.clear_with(area, style);
331324
332− let render_borders = cx.editor.menu_border();
333−
334− let area = if render_borders {
335− Widget::render(Block::default().borders(Borders::ALL), area, surface);
336− area.inner(&Margin::vertical(1))
337− } else {
338− area
339− };
340−
341325 let scroll = self.scroll;
342326
343327 let options: Vec<_> = self
@@ -378,19 +362,15 @@ impl<T: Item + 'static> Component for Menu<T> {
378362 false,
379363 );
380364
381− let render_borders = cx.editor.menu_border();
382−
383− if !render_borders {
384− if let Some(cursor) = self.cursor {
385− let offset_from_top = cursor - scroll;
386− let left = &mut surface[(area.left(), area.y + offset_from_top as u16)];
387− left.set_style(selected);
388− let right = &mut surface[(
389− area.right().saturating_sub(1),
390− area.y + offset_from_top as u16,
391− )];
392− right.set_style(selected);
393− }
365+ if let Some(cursor) = self.cursor {
366+ let offset_from_top = cursor - scroll;
367+ let left = &mut surface[(area.left(), area.y + offset_from_top as u16)];
368+ left.set_style(selected);
369+ let right = &mut surface[(
370+ area.right().saturating_sub(1),
371+ area.y + offset_from_top as u16,
372+ )];
373+ right.set_style(selected);
394374 }
395375
396376 let fits = len <= win_height;
@@ -405,13 +385,12 @@ impl<T: Item + 'static> Component for Menu<T> {
405385 for i in 0..win_height {
406386 cell = &mut surface[(area.right() - 1, area.top() + i as u16)];
407387
408− let half_block = if render_borders { "▌" } else { "▐" };
388+ cell.set_symbol("▐"); // right half block
409389
410390 if scroll_line <= i && i < scroll_line + scroll_height {
411391 // Draw scroll thumb
412− cell.set_symbol(half_block);
413392 cell.set_fg(scroll_style.fg.unwrap_or(helix_view::theme::Color::Reset));
414− } else if !render_borders {
393+ } else {
415394 // Draw scroll track
416395 cell.set_fg(scroll_style.bg.unwrap_or(helix_view::theme::Color::Reset));
417396 }
helix-term/src/ui/popup.rs+7−27
@@ -3,10 +3,7 @@ use crate::{
33 compositor::{Callback, Component, Context, Event, EventResult},
44 ctrl, key,
55};
6−use tui::{
7− buffer::Buffer as Surface,
8− widgets::{Block, Borders, Widget},
9−};
6+use tui::buffer::Buffer as Surface;
107
118use helix_core::Position;
129use helix_view::{
@@ -255,29 +252,13 @@ impl<T: Component> Component for Popup<T> {
255252 let background = cx.editor.theme.get("ui.popup");
256253 surface.clear_with(area, background);
257254
258− let render_borders = cx.editor.popup_border();
259−
260− let inner = if self
261− .contents
262− .type_name()
263− .starts_with("helix_term::ui::menu::Menu")
264− {
265− area
266− } else {
267− area.inner(&self.margin)
268− };
269−
270− let border = usize::from(render_borders);
271− if render_borders {
272− Widget::render(Block::default().borders(Borders::ALL), area, surface);
273− }
274−
255+ let inner = area.inner(&self.margin);
275256 self.contents.render(inner, surface, cx);
276257
277258 // render scrollbar if contents do not fit
278259 if self.has_scrollbar {
279− let win_height = (inner.height as usize).saturating_sub(2 * border);
280− let len = (self.child_size.1 as usize).saturating_sub(2 * border);
260+ let win_height = inner.height as usize;
261+ let len = self.child_size.1 as usize;
281262 let fits = len <= win_height;
282263 let scroll = self.scroll;
283264 let scroll_style = cx.editor.theme.get("ui.menu.scroll");
@@ -293,15 +274,14 @@ impl<T: Component> Component for Popup<T> {
293274
294275 let mut cell;
295276 for i in 0..win_height {
296− cell = &mut surface[(inner.right() - 1, inner.top() + (border + i) as u16)];
277+ cell = &mut surface[(inner.right() - 1, inner.top() + i as u16)];
297278
298− let half_block = if render_borders { "▌" } else { "▐" };
279+ cell.set_symbol("▐"); // right half block
299280
300281 if scroll_line <= i && i < scroll_line + scroll_height {
301282 // Draw scroll thumb
302− cell.set_symbol(half_block);
303283 cell.set_fg(scroll_style.fg.unwrap_or(helix_view::theme::Color::Reset));
304− } else if !render_borders {
284+ } else {
305285 // Draw scroll track
306286 cell.set_fg(scroll_style.bg.unwrap_or(helix_view::theme::Color::Reset));
307287 }
helix-vcs/Cargo.toml+1−1
@@ -19,7 +19,7 @@ tokio = { version = "1", features = ["rt", "rt-multi-thread", "time", "sync", "p
1919parking_lot = "0.12"
2020arc-swap = { version = "1.6.0" }
2121
22−gix = { version = "0.57.0", default-features = false , optional = true }
22+gix = { version = "0.56.0", default-features = false , optional = true }
2323imara-diff = "0.1.5"
2424anyhow = "1"
2525
helix-view/src/document.rs+20−57
@@ -1213,40 +1213,23 @@ impl Document {
12131213
12141214 let changes = transaction.changes();
12151215
1216− // map diagnostics over changes too
1217− changes.update_positions(self.diagnostics.iter_mut().map(|diagnostic| {
1218− let assoc = if diagnostic.starts_at_word {
1219− Assoc::BeforeWord
1220− } else {
1221− Assoc::After
1222− };
1223− (&mut diagnostic.range.start, assoc)
1224− }));
1225− changes.update_positions(self.diagnostics.iter_mut().map(|diagnostic| {
1226− let assoc = if diagnostic.ends_at_word {
1227− Assoc::AfterWord
1228− } else {
1229− Assoc::Before
1230− };
1231− (&mut diagnostic.range.end, assoc)
1232− }));
1233− self.diagnostics.retain_mut(|diagnostic| {
1234− if diagnostic.range.start > diagnostic.range.end
1235− || (!diagnostic.zero_width && diagnostic.range.start == diagnostic.range.end)
1236− {
1237− return false;
1238− }
1216+ changes.update_positions(
1217+ self.diagnostics
1218+ .iter_mut()
1219+ .map(|diagnostic| (&mut diagnostic.range.start, Assoc::After)),
1220+ );
1221+ changes.update_positions(
1222+ self.diagnostics
1223+ .iter_mut()
1224+ .map(|diagnostic| (&mut diagnostic.range.end, Assoc::After)),
1225+ );
1226+ // map state.diagnostics over changes::map_pos too
1227+ for diagnostic in &mut self.diagnostics {
12391228 diagnostic.line = self.text.char_to_line(diagnostic.range.start);
1240− true
1241− });
1229+ }
12421230
1243− self.diagnostics.sort_unstable_by_key(|diagnostic| {
1244− (
1245− diagnostic.range,
1246− diagnostic.severity,
1247− diagnostic.language_server_id,
1248− )
1249− });
1231+ self.diagnostics
1232+ .sort_unstable_by_key(|diagnostic| diagnostic.range);
12501233
12511234 // Update the inlay hint annotations' positions, helping ensure they are displayed in the proper place
12521235 let apply_inlay_hint_changes = |annotations: &mut Rc<[InlineAnnotation]>| {
@@ -1723,33 +1706,13 @@ impl Document {
17231706
17241707 pub fn replace_diagnostics(
17251708 &mut self,
1726− diagnostics: impl IntoIterator<Item = Diagnostic>,
1727− unchanged_sources: &[String],
1709+ mut diagnostics: Vec<Diagnostic>,
17281710 language_server_id: usize,
17291711 ) {
1730− if unchanged_sources.is_empty() {
1731− self.clear_diagnostics(language_server_id);
1732− } else {
1733− self.diagnostics.retain(|d| {
1734− if d.language_server_id != language_server_id {
1735− return true;
1736− }
1737−
1738− if let Some(source) = &d.source {
1739− unchanged_sources.contains(source)
1740− } else {
1741− false
1742− }
1743− });
1744− }
1745− self.diagnostics.extend(diagnostics);
1746− self.diagnostics.sort_unstable_by_key(|diagnostic| {
1747− (
1748− diagnostic.range,
1749− diagnostic.severity,
1750− diagnostic.language_server_id,
1751− )
1752− });
1712+ self.clear_diagnostics(language_server_id);
1713+ self.diagnostics.append(&mut diagnostics);
1714+ self.diagnostics
1715+ .sort_unstable_by_key(|diagnostic| diagnostic.range);
17531716 }
17541717
17551718 pub fn clear_diagnostics(&mut self, language_server_id: usize) {
helix-view/src/editor.rs+2−23
@@ -43,8 +43,9 @@ pub use helix_core::diagnostic::Severity;
4343use helix_core::{
4444 auto_pairs::AutoPairs,
4545 syntax::{self, AutoPairConfig, IndentationHeuristic, SoftWrap},
46− Change, LineEnding, Position, Selection, NATIVE_LINE_ENDING,
46+ Change, LineEnding, NATIVE_LINE_ENDING,
4747};
48+use helix_core::{Position, Selection};
4849use helix_dap as dap;
4950use helix_lsp::lsp;
5051
@@ -290,8 +291,6 @@ pub struct Config {
290291 pub insert_final_newline: bool,
291292 /// Enables smart tab
292293 pub smart_tab: Option<SmartTabConfig>,
293− /// Draw border around popups.
294− pub popup_border: PopupBorderConfig,
295294 /// Which indent heuristic to use when a new line is inserted
296295 #[serde(default)]
297296 pub indent_heuristic: IndentationHeuristic,
@@ -798,15 +797,6 @@ impl From<LineEndingConfig> for LineEnding {
798797 }
799798}
800799
801−#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
802−#[serde(rename_all = "kebab-case")]
803−pub enum PopupBorderConfig {
804− None,
805− All,
806− Popup,
807− Menu,
808−}
809−
810800impl Default for Config {
811801 fn default() -> Self {
812802 Self {
@@ -854,7 +844,6 @@ impl Default for Config {
854844 default_line_ending: LineEndingConfig::default(),
855845 insert_final_newline: true,
856846 smart_tab: Some(SmartTabConfig::default()),
857− popup_border: PopupBorderConfig::None,
858847 indent_heuristic: IndentationHeuristic::default(),
859848 }
860849 }
@@ -1075,16 +1064,6 @@ impl Editor {
10751064 }
10761065 }
10771066
1078− pub fn popup_border(&self) -> bool {
1079− self.config().popup_border == PopupBorderConfig::All
1080− || self.config().popup_border == PopupBorderConfig::Popup
1081− }
1082−
1083− pub fn menu_border(&self) -> bool {
1084− self.config().popup_border == PopupBorderConfig::All
1085− || self.config().popup_border == PopupBorderConfig::Menu
1086− }
1087−
10881067 pub fn apply_motion<F: Fn(&mut Self) + 'static>(&mut self, motion: F) {
10891068 motion(self);
10901069 self.last_motion = Some(Box::new(motion));
languages.toml+2−19
@@ -191,7 +191,6 @@ auto-format = true
191191comment-token = "//"
192192language-servers = [ "rust-analyzer" ]
193193indent = { tab-width = 4, unit = " " }
194−persistent-diagnostic-sources = ["rustc", "clippy"]
195194
196195[language.auto-pairs]
197196'(' = ')'
@@ -347,8 +346,7 @@ file-types = [
347346 "jsonld",
348347 ".vuerc",
349348 "composer.lock",
350− ".watchmanconfig",
351− "avsc"
349+ ".watchmanconfig"
352350]
353351language-servers = [ "vscode-json-language-server" ]
354352auto-format = true
@@ -957,19 +955,6 @@ indent = { tab-width = 2, unit = " " }
957955name = "java"
958956source = { git = "https://github.com/tree-sitter/tree-sitter-java", rev = "09d650def6cdf7f479f4b78f595e9ef5b58ce31e" }
959957
960−[[language]]
961−name = "smali"
962−scope = "source.smali"
963−injection-regex = "smali"
964−file-types = ["smali"]
965−comment-token = "#"
966−roots = []
967−indent = { tab-width = 4, unit = " " }
968−
969−[[grammar]]
970−name = "smali"
971−source = { git = "https://github.com/amaanq/tree-sitter-smali", rev = "5ae51e15c4d1ac93cba6127caf3d1f0a072c140c" }
972−
973958[[language]]
974959name = "ledger"
975960scope = "source.ledger"
@@ -2321,8 +2306,7 @@ file-types = [
23212306 "xpdl",
23222307 "xul",
23232308 "xoml",
2324− "musicxml",
2325− "glif"
2309+ "musicxml"
23262310]
23272311indent = { tab-width = 2, unit = " " }
23282312
@@ -2714,7 +2698,6 @@ file-types = [ "cabal" ]
27142698roots = ["cabal.project", "Setup.hs"]
27152699indent = { tab-width = 2, unit = " " }
27162700comment-token = "--"
2717−language-servers = [ "haskell-language-server" ]
27182701
27192702[[language]]
27202703name = "hurl"
logo.svg+1−1
@@ -1 +1 @@
1−<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;" viewBox="663.38 37.57 575.35 903.75"><g transform="matrix(1,0,0,1,-31352.7,-1817.25)"><g transform="matrix(1,0,0,1,31062.7,-20.8972)"><g transform="matrix(1,0,0,1,-130.173,0.00185558)"><path style="fill:#706bc8;" d="M1083.58,1875.72L1635.06,2194.12C1649.8,2202.63 1658.88,2218.37 1658.88,2235.39C1658.88,2264.98 1658.88,2311.74 1658.88,2341.33C1658.88,2349.84 1656.61,2358.03 1652.5,2365.16C1652.5,2365.16 1214.7,2112.4 1107.2,2050.33C1092.58,2041.89 1083.58,2026.29 1083.58,2009.41C1083.58,1963.5 1083.58,1875.72 1083.58,1875.72Z"></path></g><g transform="matrix(1,0,0,1,-130.173,0.00185558)"><path style="fill:#55c5e4;" d="M1635.26,2604.84C1649.88,2613.28 1658.88,2628.87 1658.88,2645.75C1658.88,2691.67 1658.88,2779.44 1658.88,2779.44L1107.41,2461.05C1092.66,2452.53 1083.58,2436.8 1083.58,2419.78C1083.58,2390.19 1083.58,2343.42 1083.58,2313.84C1083.58,2305.32 1085.85,2297.13 1089.96,2290.01C1089.96,2290.01 1527.76,2542.77 1635.26,2604.84Z"></path></g><g transform="matrix(1,0,0,1,216.062,984.098)"><path style="fill:#84ddea;" d="M790.407,1432.56C785.214,1435.55 780.717,1439.9 777.509,1445.46C767.862,1462.16 773.473,1483.76 790.004,1493.59L789.998,1493.59L761.173,1476.95C746.427,1468.44 737.344,1452.71 737.344,1435.68C737.344,1406.09 737.344,1359.33 737.344,1329.74C737.344,1312.71 746.427,1296.98 761.173,1288.47L1259.59,1000.74L1259.83,1000.6C1264.92,997.617 1269.33,993.314 1272.48,987.844C1282.13,971.136 1276.52,949.544 1259.99,939.707L1260,939.707L1288.82,956.349C1303.57,964.862 1312.65,980.595 1312.65,997.622C1312.65,1027.21 1312.65,1073.97 1312.65,1103.56C1312.65,1120.59 1303.57,1136.32 1288.82,1144.83L1259.19,1161.94L1259.59,1161.68L790.407,1432.56Z"></path></g><g transform="matrix(1,0,0,1,216.062,984.098)"><path style="fill:#997bc8;" d="M790.407,1686.24C785.214,1689.23 780.717,1693.58 777.509,1699.13C767.862,1715.84 773.473,1737.43 790.004,1747.27L789.998,1747.27L761.173,1730.63C746.427,1722.12 737.344,1706.38 737.344,1689.36C737.344,1659.77 737.344,1613.01 737.344,1583.42C737.344,1566.39 746.427,1550.66 761.173,1542.15L1259.59,1254.42L1259.83,1254.28C1264.92,1251.29 1269.33,1246.99 1272.48,1241.52C1282.13,1224.81 1276.52,1203.22 1259.99,1193.38L1260,1193.38L1288.82,1210.03C1303.57,1218.54 1312.65,1234.27 1312.65,1251.3C1312.65,1280.89 1312.65,1327.65 1312.65,1357.24C1312.65,1374.26 1303.57,1390 1288.82,1398.51L1259.19,1415.61L1259.59,1415.36L790.407,1686.24Z"></path></g></g></g></svg>
1+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;" viewBox="663.38 37.57 575.35 903.75"> <g transform="matrix(1,0,0,1,-31352.7,-1817.25)"> <g transform="matrix(1,0,0,1,31062.7,-20.8972)"> <g transform="matrix(1,0,0,1,-130.173,0.00185558)"> <path d="M1083.58,1875.72L1635.06,2194.12C1649.8,2202.63 1658.88,2218.37 1658.88,2235.39C1658.88,2264.98 1658.88,2311.74 1658.88,2341.33C1658.88,2349.84 1656.61,2358.03 1652.5,2365.16C1652.5,2365.16 1214.7,2112.4 1107.2,2050.33C1092.58,2041.89 1083.58,2026.29 1083.58,2009.41C1083.58,1963.5 1083.58,1875.72 1083.58,1875.72Z" style="fill:#706bc8;"></path> </g> <g transform="matrix(1,0,0,1,-130.173,0.00185558)"> <path d="M1635.26,2604.84C1649.88,2613.28 1658.88,2628.87 1658.88,2645.75C1658.88,2691.67 1658.88,2779.44 1658.88,2779.44L1107.41,2461.05C1092.66,2452.53 1083.58,2436.8 1083.58,2419.78C1083.58,2390.19 1083.58,2343.42 1083.58,2313.84C1083.58,2305.32 1085.85,2297.13 1089.96,2290.01C1089.96,2290.01 1527.76,2542.77 1635.26,2604.84Z" style="fill:#55c5e4;"></path> </g> <g transform="matrix(1,0,0,1,216.062,984.098)"> <path d="M790.407,1432.56C785.214,1435.55 780.717,1439.9 777.509,1445.46C767.862,1462.16 773.473,1483.76 790.004,1493.59L789.998,1493.59L761.173,1476.95C746.427,1468.44 737.344,1452.71 737.344,1435.68C737.344,1406.09 737.344,1359.33 737.344,1329.74C737.344,1312.71 746.427,1296.98 761.173,1288.47L1259.59,1000.74L1259.83,1000.6C1264.92,997.617 1269.33,993.314 1272.48,987.844C1282.13,971.136 1276.52,949.544 1259.99,939.707L1260,939.707L1288.82,956.349C1303.57,964.862 1312.65,980.595 1312.65,997.622C1312.65,1027.21 1312.65,1073.97 1312.65,1103.56C1312.65,1120.59 1303.57,1136.32 1288.82,1144.83L1259.19,1161.94L1259.59,1161.68L790.407,1432.56Z" style="fill:#84ddea;"></path> </g> <g transform="matrix(1,0,0,1,216.062,984.098)"> <path d="M790.407,1686.24C785.214,1689.23 780.717,1693.58 777.509,1699.13C767.862,1715.84 773.473,1737.43 790.004,1747.27L789.998,1747.27L761.173,1730.63C746.427,1722.12 737.344,1706.38 737.344,1689.36C737.344,1659.77 737.344,1613.01 737.344,1583.42C737.344,1566.39 746.427,1550.66 761.173,1542.15L1259.59,1254.42L1259.83,1254.28C1264.92,1251.29 1269.33,1246.99 1272.48,1241.52C1282.13,1224.81 1276.52,1203.22 1259.99,1193.38L1260,1193.38L1288.82,1210.03C1303.57,1218.54 1312.65,1234.27 1312.65,1251.3C1312.65,1280.89 1312.65,1327.65 1312.65,1357.24C1312.65,1374.26 1303.57,1390 1288.82,1398.51L1259.19,1415.61L1259.59,1415.36L790.407,1686.24Z" style="fill:#997bc8;"></path></g></g></g> </svg>
runtime/queries/smali/folds.scmdeleted−12
@@ -1,12 +0,0 @@
1−[
2− (annotation_directive)
3− (array_data_directive)
4− (field_definition)
5− (method_definition)
6− (packed_switch_directive)
7− (param_directive)
8− (parameter_directive)
9− (sparse_switch_directive)
10− (subannotation_directive)
11− (list)
12−] @fold
runtime/queries/smali/highlights.scmdeleted−216
@@ -1,216 +0,0 @@
1−; Types
2−
3−(class_identifier
4− (identifier) @type)
5−
6−(primitive_type) @type.builtin
7−
8−((class_identifier
9− . (identifier) @_first @type.builtin
10− (identifier) @type.builtin)
11− (#match? @_first "^(android|dalvik|java|kotlinx)$"))
12−
13−((class_identifier
14− . (identifier) @_first @type.builtin
15− . (identifier) @_second @type.builtin
16− (identifier) @type.builtin)
17− (#eq? @_first "com")
18− (#match? @_second "^(android|google)$"))
19−
20−; Methods
21−
22−(method_definition
23− (method_signature (method_identifier) @function.method))
24−
25−(expression
26− (opcode) @_invoke
27− (body
28− (full_method_signature
29− (method_signature (method_identifier) @function.method)))
30− (#match? @_invoke "^invoke"))
31−
32−(expression
33− (opcode) @_field_access
34− (body
35− (field_identifier) @variable.other.member)
36− (#match? @_field_access "^[is](get|put)-"))
37−
38−(method_handle
39− (full_method_signature
40− (method_signature (method_identifier) @function.method)))
41−
42−(custom_invoke
43− . (identifier) @function.method
44− (method_signature (method_identifier) @function.method))
45−
46−(annotation_value
47− (body
48− (method_signature (method_identifier) @function.method)))
49−
50−(annotation_value
51− (body
52− (full_method_signature
53− (method_signature (method_identifier) @function.method))))
54−
55−(field_definition
56− (body
57− (method_signature (method_identifier) @function.method)))
58−
59−(field_definition
60− (body
61− (full_method_signature
62− (method_signature (method_identifier) @function.method))))
63−
64−((method_identifier) @constructor
65− (#match? @constructor "^(<init>|<clinit>)$"))
66−
67−"constructor" @constructor
68−
69−; Fields
70−
71−[
72− (field_identifier)
73− (annotation_key)
74−] @variable.other.member
75−
76−((field_identifier) @constant
77− (#match? @constant "^[%u_]*$"))
78−
79−; Variables
80−
81−(variable) @variable.builtin
82−
83−(local_directive
84− (identifier) @variable)
85−
86−; Parameters
87−
88−(parameter) @variable.parameter
89−(param_identifier) @variable.parameter
90−
91−; Labels
92−
93−[
94− (label)
95− (jmp_label)
96−] @label
97−
98−; Operators
99−
100−; (opcode) @keyword.operator
101−
102−((opcode) @keyword.control.return
103− (#match? @keyword.control.return "^return"))
104−
105−((opcode) @keyword.control.conditional
106− (#match? @keyword.control.conditional "^if"))
107−
108−((opcode) @keyword.control.conditional
109− (#match? @keyword.control.conditional "^cmp"))
110−
111−((opcode) @keyword.control.exception
112− (#match? @keyword.control.exception "^throw"))
113−
114−[
115− "="
116− ".."
117−] @operator
118−
119−; Keywords
120−
121−[
122− ".class"
123− ".super"
124− ".implements"
125− ".field"
126− ".end field"
127− ".annotation"
128− ".end annotation"
129− ".subannotation"
130− ".end subannotation"
131− ".param"
132− ".end param"
133− ".parameter"
134− ".end parameter"
135− ".local"
136− ".end local"
137− ".restart local"
138− ".registers"
139− ".packed-switch"
140− ".end packed-switch"
141− ".sparse-switch"
142− ".end sparse-switch"
143− ".array-data"
144− ".end array-data"
145− ".enum"
146− (prologue_directive)
147− (epilogue_directive)
148−] @keyword
149−
150−[
151− ".source"
152−] @keyword.directive
153−
154−[
155− ".method"
156− ".end method"
157−] @keyword.function
158−
159−[
160− ".catch"
161− ".catchall"
162−] @keyword.control.exception
163−
164−; Literals
165−
166−(string) @string
167−(source_directive (string "\"" _ @string.special.url "\""))
168−(escape_sequence) @constant.character.escape
169−
170−(character) @constant.character
171−
172−"L" @punctuation
173−
174−(line_directive (number) @comment) @comment
175−(".locals" (number) @comment) @comment
176−
177−(number) @constant.numeric.integer
178−
179−[
180− (float)
181− (NaN)
182− (Infinity)
183−] @constant.numeric.float
184−
185−(boolean) @constant.builtin.boolean
186−
187−(null) @constant.builtin
188−
189−; Misc
190−
191−(annotation_visibility) @keyword.storage.modifier
192−
193−(access_modifier) @keyword.storage.type
194−
195−(array_type
196− "[" @punctuation.special)
197−
198−["{" "}"] @punctuation.bracket
199−
200−["(" ")"] @punctuation.bracket
201−
202−[
203− "->"
204− ","
205− ":"
206− ";"
207− "@"
208− "/"
209−] @punctuation.delimiter
210−
211−; Comments
212−
213−(comment) @comment
214−
215−(class_definition
216− (comment) @comment.block.documentation)
runtime/queries/smali/indents.scmdeleted−31
@@ -1,31 +0,0 @@
1−[
2− (annotation_directive)
3− (array_data_directive)
4− (field_definition)
5− (method_definition)
6− (packed_switch_directive)
7− (param_directive)
8− (parameter_directive)
9− (sparse_switch_directive)
10− (subannotation_directive)
11− (list)
12− "\{"
13−] @indent
14−
15−[
16− ".end annotation"
17− ".end array-data"
18− ".end field"
19− ".end method"
20− ".end packed-switch"
21− ".end param"
22− ".end parameter"
23− ".end sparse-switch"
24− ".end subannotation"
25− "\}"
26−] @outdent
27−
28−[
29− (ERROR)
30− (comment)
31−] @indent.always
runtime/queries/smali/injections.scmdeleted−2
@@ -1,2 +0,0 @@
1−((comment) @injection.content
2− (#set! injection.language "comment"))
runtime/queries/smali/locals.scmdeleted−42
@@ -1,42 +0,0 @@
1−[
2− (class_directive)
3− (expression)
4− (annotation_directive)
5− (array_data_directive)
6− (method_definition)
7− (packed_switch_directive)
8− (sparse_switch_directive)
9− (subannotation_directive)
10−] @local.scope
11−
12−[
13− (identifier)
14− (class_identifier)
15− (label)
16− (jmp_label)
17−] @local.reference
18−
19−(enum_reference
20− (field_identifier) @local.definition)
21−
22−((field_definition
23− (access_modifiers) @_mod
24− (field_identifier) @local.definition)
25− (#eq? @_mod "enum"))
26−
27−(field_definition
28− (field_identifier) @local.definition
29− (field_type) @local.definition)
30−
31−(annotation_key) @local.definition
32−
33−(method_definition
34− (method_signature (method_identifier) @local.definition))
35−
36−(param_identifier) @local.definition
37−
38−(annotation_directive
39− (class_identifier) @local.definition)
40−
41−(class_directive
42− (class_identifier) @local.definition)
runtime/themes/horizon-dark.tomldeleted−80
@@ -1,80 +0,0 @@
1−# Syntax
2−string = "orange"
3−constant = "purple"
4−"constant.numeric" = "orange"
5−"constant.builtin" = "orange"
6−variable = "red"
7−comment = "light-gray"
8−special = "purple"
9−"punctuation.bracket" = "purple"
10−keyword = "purple"
11−function = "blue"
12−label = "orange"
13−type = "orange"
14−namespace = "orange"
15−
16−# User Interface
17−"ui.background" = { bg = "bg", fg = "gray" }
18−"ui.background.separator" = "light-gray"
19−"ui.text" = "white"
20−"ui.text.focus" = "green"
21−"ui.text.inactive" = "selection"
22−"ui.text.info" = "orange"
23−"ui.cursor" = { modifiers = ["reversed"] }
24−"ui.cursor.primary" = { modifiers = ["reversed"] }
25−"ui.cursor.match" = { bg = "selection" }
26−"ui.gutter" = "gray"
27−"ui.gutter.selected" = "light-gray"
28−"ui.selection" = { bg = "selection" }
29−"ui.virtual.indent-guide" = { fg = "gray"}
30−"ui.virtual.whitespace" = { fg = "light-gray"}
31−"ui.statusline" = { bg = "dark-bg", fg = "light-gray" }
32−"ui.popup" = { bg = "dark-bg", fg = "orange" }
33−"ui.help" = { bg = "dark-bg", fg = "orange" }
34−"ui.menu" = { bg = "dark-bg", fg = "light-gray" }
35−"ui.menu.selected" = { bg = "selection", fg = "orange" }
36−"ui.window" = "selection"
37−"ui.bufferline" = { bg = "dark-bg", fg = "light-gray" }
38−"ui.bufferline.active" = { bg = "dark-bg", fg = "orange" }
39−
40−# Diagnostics
41−"diagnostic" = { underline = { style = "curl" } }
42−"diagnostic.hint" = { underline = { color = "green", style = "curl" } }
43−"diagnostic.info" = { underline = { color = "blue", style = "curl" } }
44−"diagnostics.error" = { underline = { color = "red", style = "curl"} }
45−"diagnostics.warning" = { underline = { color = "orange", style = "curl"} }
46−
47−warning = { fg = "orange", modifiers = ["bold"] }
48−error = { fg = "red", modifiers = ["bold"] }
49−info = { fg = "blue", modifiers = ["bold"] }
50−hint = { fg = "green", modifiers = ["bold"] }
51−
52−# Markup
53−"markup.heading" = "pink"
54−"markup.list" = "light-gray"
55−"markup.list.checked" = "green"
56−"markup.list.unchecked" = "light-gray"
57−"markup.bold" = { modifiers = ["bold"] }
58−"markup.italic" = { modifiers = ["italic"] }
59−"markup.strikethrough" = { modifiers = ["crossed_out"] }
60−"markup.link" = "blue"
61−"markup.quote" = "orange"
62−"markup.raw" = "orange"
63−
64−"diff.plus" = "green"
65−"diff.minus" = "red"
66−"diff.delta" = "orange"
67−
68−[palette]
69−white = "#D5D8DA"
70−gray = "#2E303E"
71−light-gray = "#6C6F93"
72−bg = "#1C1E26"
73−dark-bg = "#16161C"
74−pink = "#EE64AE"
75−selection = "#353747"
76−green = "#27D796"
77−orange = "#FAB795"
78−purple = "#B877DB"
79−red = "#E95678"
80−blue = "#25B2BC"
runtime/themes/noctis.toml+25−25
@@ -7,8 +7,8 @@
77
88'property' = { fg = "red" } # Regex group names.
99"warning" = { fg ="yellow", modifiers = ["bold"] } # Editor warnings.
10−"error" = { fg = "red", modifiers = ["bold"] } # Editor errors, like mis-typing a command.
11−"info" = { fg = "mid-blue" } # Code diagnostic info in gutter (LSP).
10+"error" = { bg = "mid-green", fg = "red", modifiers = ["bold"] } # Editor errors, like mis-typing a command.
11+"info" = { fg = "mid-blue", bg = "mid-green" } # Code diagnostic info in gutter (LSP).
1212# ? Difference between info and hint ?
1313"hint" = { fg = "light-green", modifiers = ["bold"] } # Code diagnostics hint in gutter (LSP).
1414
@@ -21,14 +21,14 @@
2121# UI ==============================
2222# For styling helix itself.
2323
24−'ui.background' = { fg = "autocomp-green", bg = "dark-green" } # Default background color.
24+'ui.background' = { bg = "dark-green"} # Default background color.
2525'ui.window' = { fg = "mid-green" } # Window border between splits.
2626
2727'ui.gutter' = { } # Left gutter for diagnostics and breakpoints.
2828
2929'ui.text' = { fg = "white" } # Default text color.
3030'ui.text.focus' = { fg = "white", bg = "mid-green", modifiers = ["bold"] } # Selection highlight in buffer-picker or file-picker.
31−'ui.text.info' = { fg = "white" } # Info popup contents (space mode menu).
31+'ui.text.info' = { } # Info popup contents (space mode menu).
3232
3333'ui.cursor' = { fg = "dark-green", bg = "white" } # Fallback cursor colour, non-primary cursors when there are multiple (shift-c).
3434'ui.cursor.primary' = { fg = "dark-green", bg = "light-blue" } # The primary cursor when there are multiple (shift-c).
@@ -40,8 +40,8 @@
4040'ui.selection.primary' = { bg = "autocomp-green" } # The primary selection when there are multiple.
4141'ui.cursorline.primary' = { bg = 'mid-green' }
4242
43−'ui.linenr' = { fg = "gray" } # Line numbers.
44−'ui.linenr.selected' = { fg = "light-green", modifiers = [ "bold" ] } # Current line number.
43+'ui.linenr' = { bg = "dark-green", fg = "gray" } # Line numbers.
44+'ui.linenr.selected' = { bg = "mid-green", fg = "light-green", modifiers = [ "bold" ] } # Current line number.
4545
4646'ui.virtual' = { fg = "mid-green" } # Namespace for additions to the editing area.
4747'ui.virtual.ruler' = { bg = "mid-green" } # Vertical rulers (colored columns in editing area).
@@ -75,9 +75,9 @@
7575#'type.builtin' = { } # Primitive types of the language (string, int, float).
7676#'type.enum.variant' = { } # A variant of an enum.
7777
78−'constructor' = { fg = "light-blue", modifiers = ["bold"]} # Constructor method for a class or struct. And in some cases applies to module names
78+'constructor' = { fg = "mid-blue", modifiers = ["bold"]} # Constructor method for a class or struct. And in some cases applies to module names
7979
80−'constant' = { fg = "light-blue", modifiers = ["bold"] } # Constant value
80+'constant' = { fg = "light-blue" } # Constant value
8181'constant.builtin' = { fg = "mid-blue", modifiers = ["bold"] } # Special constants like `true`, `false`, `none`, etc.
8282'constant.builtin.boolean' = { } # True or False.
8383'constant.character' = { fg = "light-green"} # Constant of character type.
@@ -88,20 +88,21 @@
8888
8989'string' = { fg = "light-green" } # String literal.
9090'string.regexp' = { } # Regular expression literal.
91−'string.special' = { fg = "red" } # Strings containing a path, URL, etc.
92−# 'string.special.path' = { } # String containing a file path.
93−# 'string.special.url' = { } # String containing a web URL.
94−# 'string.special.symbol' = { } # Erlang/Elixir atoms, Ruby symbols, Clojure keywords.
91+'string.special' = { fg = "light-blue" } # Strings containing a path, URL, etc.
92+'string.special.path' = { } # String containing a file path.
93+'string.special.url' = { } # String containing a web URL.
94+'string.special.symbol' = { } # Erlang/Elixir atoms, Ruby symbols, Clojure keywords.
9595
9696'comment' = { fg = "gray", modifiers = ["italic"] } # This is a comment.
9797'comment.line' = { } # Line comments, like this.
9898'comment.block' = { } # Block comments, like /* this */ in some languages.
9999'comment.block.documentation' = { } # Doc comments, e.g '///' in rust.
100100
101−'variable' = { fg = "light-orange" } # Variable names.
102−# 'variable.builtin' = { } # Language reserved variables: `this`, `self`, `super`, etc.
103−# 'variable.parameter' = { } # Function parameters.
104−'variable.other.member' = { fg = "orange" } # Fields of composite data types (e.g. structs, unions).
101+'variable' = { fg = "white" } # Variable names.
102+'variable.builtin' = { } # Language reserved variables: `this`, `self`, `super`, etc.
103+'variable.parameter' = { } # Function parameters.
104+'variable.other.member' = { } # Fields of composite data types (e.g. structs, unions).
105+'variable.function' = { } # ?
105106
106107'label' = { fg = "purple" } # Loop labels in rust.
107108
@@ -112,17 +113,17 @@
112113'keyword' = { fg = "pink", modifiers = ["bold"] } # Language reserved keywords.
113114'keyword.control' = { fg = "pink", modifiers = ["bold"] } # Control keywords.
114115'keyword.control.conditional' = { fg = "pink", modifiers = ["bold"] } # 'if', 'else', 'elif'.
115−# 'keyword.control.repeat' = { } # 'for', 'while', 'loop'.
116+'keyword.control.repeat' = { } # 'for', 'while', 'loop'.
116117'keyword.control.import' = { fg = "pink", modifiers = ["italic"] } # 'import', 'export' ('use'?).
117−# 'keyword.control.return' = { } # 'return' in most languages.
118+'keyword.control.return' = { } # 'return' in most languages.
118119'keyword.control.exception' = {fg = "pink", modifiers = ["bold"] } # 'raise' in python.
119−'keyword.operator' = { fg = "pink" } # 'or', 'and', 'in'.
120+'keyword.operator' = { } # 'or', 'and', 'in'.
120121'keyword.directive' = { fg = "purple" } # Preprocessor directives (#if in C).
121−'keyword.function' = { fg= "red" } # The keyword to define a function: 'def', 'fun', 'fn'.
122+'keyword.function' = { } # The keyword to define a function: 'def', 'fun', 'fn'.
122123
123124'operator' = { fg = "pink", modifiers = ["bold"] } # Logical (&&, ||) and - I assume - Mathematical (+, %) operators
124125
125−'function' = { fg = "mid-blue"}
126+'function' = { fg = "dark-blue"}
126127'function.builtin' = { fg = "dark-blue" }
127128'function.method' = { fg = "dark-blue" } # Class / Struct methods.
128129'function.macro' = { fg = "purple" } # Like macros in rust.
@@ -180,8 +181,8 @@
180181# Version control changes.
181182
182183'diff.plus' = "light-green" # { } # Additions.
183−'diff.minus' = "red" # { } # Deletions.
184−'diff.delta' = "yellow" # { } # Modifications.
184+'diff.minus' = "yellow" # { } # Deletions.
185+'diff.delta' = "red" # { } # Modifications.
185186# 'diff.delta.moved' = { } # Renamed or moved files / changes.
186187
187188
@@ -196,9 +197,8 @@ yellow = "#ffd800"
196197purple = "#918cff"
197198white = "#b1cace"
198199orange = "#ffa864"
199−light-orange = "#fff2c5"
200200gray = "#5b858b" # mainly for comments/background text
201−light-gray = "#2a3c41" # used when whitespace rendering is enabled and for indent-guides
201+light-gray = "#354e51" # used when whitespace rendering is enabled and for indent-guides
202202red = "#e34e1b"
203203
204204dark-blue = "#19a2b7"
runtime/themes/nord.toml−9
@@ -134,15 +134,6 @@
134134"ui.bufferline" = { fg = "nord5", bg = "nord1" }
135135"ui.bufferline.active" = { fg = "nord6", bg = "nord2", underline = { color = "nord8", style = "line" }, modifiers = [ "italic" ] }
136136
137−# Markup
138−"markup.heading" = "nord8"
139−"markup.list" = "nord9"
140−"markup.bold" = { modifiers = ["bold"] }
141−"markup.italic" = { modifiers = ["italic"] }
142−"markup.strikethrough" = { modifiers = ["crossed_out"] }
143−"markup.link.text" = "nord8"
144−"markup.raw" = "nord7"
145−
146137[palette]
147138# Polar Night is made up of four darker colors that are commonly used for base elements like backgrounds or text color in bright ambiance designs.
148139#