Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Completion items change when cycling #12119

Closed
RoloEdits opened this issue Nov 24, 2024 · 11 comments · May be fixed by #12214
Closed

Completion items change when cycling #12119

RoloEdits opened this issue Nov 24, 2024 · 11 comments · May be fixed by #12214
Labels
A-language-server Area: Language server client C-bug Category: This is a bug

Comments

@RoloEdits
Copy link
Contributor

RoloEdits commented Nov 24, 2024

Summary

After building from source to the latest master(cbbeca6), I noticed the completion items change when cycling through them. The names are initially what is expected, but the actual insertion in not. And then when cycling, the name changes to match what gets inserted.

Reproduction Steps

completion-changing

Helix log

Logs are pretty noisy so tried to isolate a part of when the completion items were being cycled.

~/.cache/helix/helix.log
2024-11-23T22:59:04.445 helix_lsp::transport [INFO] rust-analyzer -> {"jsonrpc":"2.0","method":"textDocument/inlayHint","params":{"range":{"end":{"character":0,"line":76},"start":{"character":0,"line":0}},"textDocument":{"uri":"file:///D:/source/helix/helix-core/src/shellwords.rs"}},"id":29}
2024-11-23T22:59:04.446 helix_lsp::transport [INFO] rust-analyzer <- {"jsonrpc":"2.0","id":29,"result":[{"position":{"line":4,"character":28},"label":": char","kind":1,"textEdits":[{"range":{"start":{"line":4,"character":28},"end":{"line":4,"character":28}},"newText":": char"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":7,"character":38},"label":[{"value":"init:","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/core/src/iter/traits/iterator.rs","range":{"start":{"line":2575,"character":28},"end":{"line":2575,"character":32}}}}],"kind":2,"paddingLeft":false,"paddingRight":true},{"position":{"line":7,"character":53},"label":[{"value":"f:","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/core/src/iter/traits/iterator.rs","range":{"start":{"line":2575,"character":41},"end":{"line":2575,"character":42}}}}],"kind":2,"paddingLeft":false,"paddingRight":true},{"position":{"line":7,"character":61},"label":[{"value":": "},{"value":"String","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs","range":{"start":{"line":361,"character":11},"end":{"line":361,"character":17}}}}],"kind":1,"textEdits":[{"range":{"start":{"line":7,"character":61},"end":{"line":7,"character":61}},"newText":": String"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":7,"character":64},"label":": char","kind":1,"textEdits":[{"range":{"start":{"line":7,"character":64},"end":{"line":7,"character":64}},"newText":": char"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":9,"character":25},"label":[{"value":"ch:","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs","range":{"start":{"line":1354,"character":27},"end":{"line":1354,"character":29}}}}],"kind":2,"paddingLeft":false,"paddingRight":true},{"position":{"line":11,"character":21},"label":[{"value":"ch:","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs","range":{"start":{"line":1354,"character":27},"end":{"line":1354,"character":29}}}}],"kind":2,"paddingLeft":false,"paddingRight":true},{"position":{"line":168,"character":1},"label":"impl From for Shellwords<'a>","paddingLeft":true,"paddingRight":false},{"position":{"line":167,"character":5},"label":[{"value":"fn from","location":{"uri":"file:///d:/source/helix/helix-core/src/shellwords.rs","range":{"start":{"line":44,"character":7},"end":{"line":44,"character":11}}}}],"paddingLeft":true,"paddingRight":false},{"position":{"line":47,"character":21},"label":[{"value":": "},{"value":"State","location":{"uri":"file:///d:/source/helix/helix-core/src/shellwords.rs","range":{"start":{"line":23,"character":5},"end":{"line":23,"character":10}}}}],"kind":1,"textEdits":[{"range":{"start":{"line":47,"character":21},"end":{"line":47,"character":21}},"newText":": State"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":48,"character":21},"label":[{"value":": "},{"value":"Vec","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/vec/mod.rs","range":{"start":{"line":396,"character":11},"end":{"line":396,"character":14}}}},{"value":"<"},{"value":"Cow","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/borrow.rs","range":{"start":{"line":178,"character":9},"end":{"line":178,"character":12}}}},{"value":"<'a, str>>"}],"kind":1,"textEdits":[{"range":{"start":{"line":48,"character":21},"end":{"line":48,"character":21}},"newText":": Vec<Cow<'a, str>>"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":49,"character":21},"label":[{"value":": "},{"value":"Vec","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/vec/mod.rs","range":{"start":{"line":396,"character":11},"end":{"line":396,"character":14}}}},{"value":"<&str>"}],"kind":1,"textEdits":[{"range":{"start":{"line":49,"character":21},"end":{"line":49,"character":21}},"newText":": Vec<&str>"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":50,"character":23},"label":[{"value":": "},{"value":"String","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs","range":{"start":{"line":361,"character":11},"end":{"line":361,"character":17}}}}],"kind":1,"textEdits":[{"range":{"start":{"line":50,"character":23},"end":{"line":50,"character":23}},"newText":": String"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":52,"character":26},"label":": usize","kind":1,"textEdits":[{"range":{"start":{"line":52,"character":26},"end":{"line":52,"character":26}},"newText":": usize"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":53,"character":31},"label":": usize","kind":1,"textEdits":[{"range":{"start":{"line":53,"character":31},"end":{"line":53,"character":31}},"newText":": usize"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":54,"character":19},"label":": usize","kind":1,"textEdits":[{"range":{"start":{"line":54,"character":19},"end":{"line":54,"character":19}},"newText":": usize"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":56,"character":14},"label":": usize","kind":1,"paddingLeft":false,"paddingRight":false},{"position":{"line":56,"character":17},"label":": char","kind":1,"paddingLeft":false,"paddingRight":false},{"position":{"line":69,"character":45},"label":[{"value":"string:","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs","range":{"start":{"line":1062,"character":31},"end":{"line":1062,"character":37}}}}],"kind":2,"paddingLeft":false,"paddingRight":true}]}
2024-11-23T22:59:04.447 helix_lsp::transport [INFO] rust-analyzer <- [{"kind":1,"label":": char","paddingLeft":false,"paddingRight":false,"position":{"character":28,"line":4},"textEdits":[{"newText":": char","range":{"end":{"character":28,"line":4},"start":{"character":28,"line":4}}}]},{"kind":2,"label":[{"location":{"range":{"end":{"character":32,"line":2575},"start":{"character":28,"line":2575}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/core/src/iter/traits/iterator.rs"},"value":"init:"}],"paddingLeft":false,"paddingRight":true,"position":{"character":38,"line":7}},{"kind":2,"label":[{"location":{"range":{"end":{"character":42,"line":2575},"start":{"character":41,"line":2575}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/core/src/iter/traits/iterator.rs"},"value":"f:"}],"paddingLeft":false,"paddingRight":true,"position":{"character":53,"line":7}},{"kind":1,"label":[{"value":": "},{"location":{"range":{"end":{"character":17,"line":361},"start":{"character":11,"line":361}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs"},"value":"String"}],"paddingLeft":false,"paddingRight":false,"position":{"character":61,"line":7},"textEdits":[{"newText":": String","range":{"end":{"character":61,"line":7},"start":{"character":61,"line":7}}}]},{"kind":1,"label":": char","paddingLeft":false,"paddingRight":false,"position":{"character":64,"line":7},"textEdits":[{"newText":": char","range":{"end":{"character":64,"line":7},"start":{"character":64,"line":7}}}]},{"kind":2,"label":[{"location":{"range":{"end":{"character":29,"line":1354},"start":{"character":27,"line":1354}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs"},"value":"ch:"}],"paddingLeft":false,"paddingRight":true,"position":{"character":25,"line":9}},{"kind":2,"label":[{"location":{"range":{"end":{"character":29,"line":1354},"start":{"character":27,"line":1354}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs"},"value":"ch:"}],"paddingLeft":false,"paddingRight":true,"position":{"character":21,"line":11}},{"label":"impl From for Shellwords<'a>","paddingLeft":true,"paddingRight":false,"position":{"character":1,"line":168}},{"label":[{"location":{"range":{"end":{"character":11,"line":44},"start":{"character":7,"line":44}},"uri":"file:///d:/source/helix/helix-core/src/shellwords.rs"},"value":"fn from"}],"paddingLeft":true,"paddingRight":false,"position":{"character":5,"line":167}},{"kind":1,"label":[{"value":": "},{"location":{"range":{"end":{"character":10,"line":23},"start":{"character":5,"line":23}},"uri":"file:///d:/source/helix/helix-core/src/shellwords.rs"},"value":"State"}],"paddingLeft":false,"paddingRight":false,"position":{"character":21,"line":47},"textEdits":[{"newText":": State","range":{"end":{"character":21,"line":47},"start":{"character":21,"line":47}}}]},{"kind":1,"label":[{"value":": "},{"location":{"range":{"end":{"character":14,"line":396},"start":{"character":11,"line":396}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/vec/mod.rs"},"value":"Vec"},{"value":"<"},{"location":{"range":{"end":{"character":12,"line":178},"start":{"character":9,"line":178}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/borrow.rs"},"value":"Cow"},{"value":"<'a, str>>"}],"paddingLeft":false,"paddingRight":false,"position":{"character":21,"line":48},"textEdits":[{"newText":": Vec<Cow<'a, str>>","range":{"end":{"character":21,"line":48},"start":{"character":21,"line":48}}}]},{"kind":1,"label":[{"value":": "},{"location":{"range":{"end":{"character":14,"line":396},"start":{"character":11,"line":396}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/vec/mod.rs"},"value":"Vec"},{"value":"<&str>"}],"paddingLeft":false,"paddingRight":false,"position":{"character":21,"line":49},"textEdits":[{"newText":": Vec<&str>","range":{"end":{"character":21,"line":49},"start":{"character":21,"line":49}}}]},{"kind":1,"label":[{"value":": "},{"location":{"range":{"end":{"character":17,"line":361},"start":{"character":11,"line":361}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs"},"value":"String"}],"paddingLeft":false,"paddingRight":false,"position":{"character":23,"line":50},"textEdits":[{"newText":": String","range":{"end":{"character":23,"line":50},"start":{"character":23,"line":50}}}]},{"kind":1,"label":": usize","paddingLeft":false,"paddingRight":false,"position":{"character":26,"line":52},"textEdits":[{"newText":": usize","range":{"end":{"character":26,"line":52},"start":{"character":26,"line":52}}}]},{"kind":1,"label":": usize","paddingLeft":false,"paddingRight":false,"position":{"character":31,"line":53},"textEdits":[{"newText":": usize","range":{"end":{"character":31,"line":53},"start":{"character":31,"line":53}}}]},{"kind":1,"label":": usize","paddingLeft":false,"paddingRight":false,"position":{"character":19,"line":54},"textEdits":[{"newText":": usize","range":{"end":{"character":19,"line":54},"start":{"character":19,"line":54}}}]},{"kind":1,"label":": usize","paddingLeft":false,"paddingRight":false,"position":{"character":14,"line":56}},{"kind":1,"label":": char","paddingLeft":false,"paddingRight":false,"position":{"character":17,"line":56}},{"kind":2,"label":[{"location":{"range":{"end":{"character":37,"line":1062},"start":{"character":31,"line":1062}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs"},"value":"string:"}],"paddingLeft":false,"paddingRight":true,"position":{"character":45,"line":69}}]
2024-11-23T22:59:04.450 helix_view::document [DEBUG] id 2 modified - last saved: 0, current: 1
2024-11-23T22:59:04.459 helix_view::document [DEBUG] id 2 modified - last saved: 0, current: 1
2024-11-23T22:59:04.809 helix_vcs::diff::worker [INFO] Diff computation timed out, update of diffs might appear delayed
2024-11-23T22:59:04.814 helix_view::document [DEBUG] id 2 modified - last saved: 0, current: 1
2024-11-23T22:59:04.825 helix_term::application [DEBUG] received editor event: IdleTimer
2024-11-23T22:59:04.825 helix_lsp::transport [INFO] rust-analyzer -> {"jsonrpc":"2.0","method":"textDocument/inlayHint","params":{"range":{"end":{"character":0,"line":76},"start":{"character":0,"line":0}},"textDocument":{"uri":"file:///D:/source/helix/helix-core/src/shellwords.rs"}},"id":30}
2024-11-23T22:59:04.826 helix_lsp::transport [INFO] rust-analyzer <- {"jsonrpc":"2.0","id":30,"result":[{"position":{"line":4,"character":28},"label":": char","kind":1,"textEdits":[{"range":{"start":{"line":4,"character":28},"end":{"line":4,"character":28}},"newText":": char"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":7,"character":38},"label":[{"value":"init:","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/core/src/iter/traits/iterator.rs","range":{"start":{"line":2575,"character":28},"end":{"line":2575,"character":32}}}}],"kind":2,"paddingLeft":false,"paddingRight":true},{"position":{"line":7,"character":53},"label":[{"value":"f:","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/core/src/iter/traits/iterator.rs","range":{"start":{"line":2575,"character":41},"end":{"line":2575,"character":42}}}}],"kind":2,"paddingLeft":false,"paddingRight":true},{"position":{"line":7,"character":61},"label":[{"value":": "},{"value":"String","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs","range":{"start":{"line":361,"character":11},"end":{"line":361,"character":17}}}}],"kind":1,"textEdits":[{"range":{"start":{"line":7,"character":61},"end":{"line":7,"character":61}},"newText":": String"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":7,"character":64},"label":": char","kind":1,"textEdits":[{"range":{"start":{"line":7,"character":64},"end":{"line":7,"character":64}},"newText":": char"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":9,"character":25},"label":[{"value":"ch:","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs","range":{"start":{"line":1354,"character":27},"end":{"line":1354,"character":29}}}}],"kind":2,"paddingLeft":false,"paddingRight":true},{"position":{"line":11,"character":21},"label":[{"value":"ch:","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs","range":{"start":{"line":1354,"character":27},"end":{"line":1354,"character":29}}}}],"kind":2,"paddingLeft":false,"paddingRight":true},{"position":{"line":168,"character":1},"label":"impl From for Shellwords<'a>","paddingLeft":true,"paddingRight":false},{"position":{"line":167,"character":5},"label":[{"value":"fn from","location":{"uri":"file:///d:/source/helix/helix-core/src/shellwords.rs","range":{"start":{"line":44,"character":7},"end":{"line":44,"character":11}}}}],"paddingLeft":true,"paddingRight":false},{"position":{"line":47,"character":21},"label":[{"value":": "},{"value":"State","location":{"uri":"file:///d:/source/helix/helix-core/src/shellwords.rs","range":{"start":{"line":23,"character":5},"end":{"line":23,"character":10}}}}],"kind":1,"textEdits":[{"range":{"start":{"line":47,"character":21},"end":{"line":47,"character":21}},"newText":": State"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":48,"character":21},"label":[{"value":": "},{"value":"Vec","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/vec/mod.rs","range":{"start":{"line":396,"character":11},"end":{"line":396,"character":14}}}},{"value":"<"},{"value":"Cow","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/borrow.rs","range":{"start":{"line":178,"character":9},"end":{"line":178,"character":12}}}},{"value":"<'a, str>>"}],"kind":1,"textEdits":[{"range":{"start":{"line":48,"character":21},"end":{"line":48,"character":21}},"newText":": Vec<Cow<'a, str>>"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":49,"character":21},"label":[{"value":": "},{"value":"Vec","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/vec/mod.rs","range":{"start":{"line":396,"character":11},"end":{"line":396,"character":14}}}},{"value":"<&str>"}],"kind":1,"textEdits":[{"range":{"start":{"line":49,"character":21},"end":{"line":49,"character":21}},"newText":": Vec<&str>"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":50,"character":23},"label":[{"value":": "},{"value":"String","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs","range":{"start":{"line":361,"character":11},"end":{"line":361,"character":17}}}}],"kind":1,"textEdits":[{"range":{"start":{"line":50,"character":23},"end":{"line":50,"character":23}},"newText":": String"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":52,"character":26},"label":": usize","kind":1,"textEdits":[{"range":{"start":{"line":52,"character":26},"end":{"line":52,"character":26}},"newText":": usize"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":53,"character":31},"label":": usize","kind":1,"textEdits":[{"range":{"start":{"line":53,"character":31},"end":{"line":53,"character":31}},"newText":": usize"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":54,"character":19},"label":": usize","kind":1,"textEdits":[{"range":{"start":{"line":54,"character":19},"end":{"line":54,"character":19}},"newText":": usize"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":56,"character":14},"label":": usize","kind":1,"paddingLeft":false,"paddingRight":false},{"position":{"line":56,"character":17},"label":": char","kind":1,"paddingLeft":false,"paddingRight":false},{"position":{"line":69,"character":45},"label":[{"value":"string:","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs","range":{"start":{"line":1062,"character":31},"end":{"line":1062,"character":37}}}}],"kind":2,"paddingLeft":false,"paddingRight":true}]}
2024-11-23T22:59:04.827 helix_lsp::transport [INFO] rust-analyzer <- [{"kind":1,"label":": char","paddingLeft":false,"paddingRight":false,"position":{"character":28,"line":4},"textEdits":[{"newText":": char","range":{"end":{"character":28,"line":4},"start":{"character":28,"line":4}}}]},{"kind":2,"label":[{"location":{"range":{"end":{"character":32,"line":2575},"start":{"character":28,"line":2575}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/core/src/iter/traits/iterator.rs"},"value":"init:"}],"paddingLeft":false,"paddingRight":true,"position":{"character":38,"line":7}},{"kind":2,"label":[{"location":{"range":{"end":{"character":42,"line":2575},"start":{"character":41,"line":2575}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/core/src/iter/traits/iterator.rs"},"value":"f:"}],"paddingLeft":false,"paddingRight":true,"position":{"character":53,"line":7}},{"kind":1,"label":[{"value":": "},{"location":{"range":{"end":{"character":17,"line":361},"start":{"character":11,"line":361}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs"},"value":"String"}],"paddingLeft":false,"paddingRight":false,"position":{"character":61,"line":7},"textEdits":[{"newText":": String","range":{"end":{"character":61,"line":7},"start":{"character":61,"line":7}}}]},{"kind":1,"label":": char","paddingLeft":false,"paddingRight":false,"position":{"character":64,"line":7},"textEdits":[{"newText":": char","range":{"end":{"character":64,"line":7},"start":{"character":64,"line":7}}}]},{"kind":2,"label":[{"location":{"range":{"end":{"character":29,"line":1354},"start":{"character":27,"line":1354}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs"},"value":"ch:"}],"paddingLeft":false,"paddingRight":true,"position":{"character":25,"line":9}},{"kind":2,"label":[{"location":{"range":{"end":{"character":29,"line":1354},"start":{"character":27,"line":1354}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs"},"value":"ch:"}],"paddingLeft":false,"paddingRight":true,"position":{"character":21,"line":11}},{"label":"impl From for Shellwords<'a>","paddingLeft":true,"paddingRight":false,"position":{"character":1,"line":168}},{"label":[{"location":{"range":{"end":{"character":11,"line":44},"start":{"character":7,"line":44}},"uri":"file:///d:/source/helix/helix-core/src/shellwords.rs"},"value":"fn from"}],"paddingLeft":true,"paddingRight":false,"position":{"character":5,"line":167}},{"kind":1,"label":[{"value":": "},{"location":{"range":{"end":{"character":10,"line":23},"start":{"character":5,"line":23}},"uri":"file:///d:/source/helix/helix-core/src/shellwords.rs"},"value":"State"}],"paddingLeft":false,"paddingRight":false,"position":{"character":21,"line":47},"textEdits":[{"newText":": State","range":{"end":{"character":21,"line":47},"start":{"character":21,"line":47}}}]},{"kind":1,"label":[{"value":": "},{"location":{"range":{"end":{"character":14,"line":396},"start":{"character":11,"line":396}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/vec/mod.rs"},"value":"Vec"},{"value":"<"},{"location":{"range":{"end":{"character":12,"line":178},"start":{"character":9,"line":178}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/borrow.rs"},"value":"Cow"},{"value":"<'a, str>>"}],"paddingLeft":false,"paddingRight":false,"position":{"character":21,"line":48},"textEdits":[{"newText":": Vec<Cow<'a, str>>","range":{"end":{"character":21,"line":48},"start":{"character":21,"line":48}}}]},{"kind":1,"label":[{"value":": "},{"location":{"range":{"end":{"character":14,"line":396},"start":{"character":11,"line":396}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/vec/mod.rs"},"value":"Vec"},{"value":"<&str>"}],"paddingLeft":false,"paddingRight":false,"position":{"character":21,"line":49},"textEdits":[{"newText":": Vec<&str>","range":{"end":{"character":21,"line":49},"start":{"character":21,"line":49}}}]},{"kind":1,"label":[{"value":": "},{"location":{"range":{"end":{"character":17,"line":361},"start":{"character":11,"line":361}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs"},"value":"String"}],"paddingLeft":false,"paddingRight":false,"position":{"character":23,"line":50},"textEdits":[{"newText":": String","range":{"end":{"character":23,"line":50},"start":{"character":23,"line":50}}}]},{"kind":1,"label":": usize","paddingLeft":false,"paddingRight":false,"position":{"character":26,"line":52},"textEdits":[{"newText":": usize","range":{"end":{"character":26,"line":52},"start":{"character":26,"line":52}}}]},{"kind":1,"label":": usize","paddingLeft":false,"paddingRight":false,"position":{"character":31,"line":53},"textEdits":[{"newText":": usize","range":{"end":{"character":31,"line":53},"start":{"character":31,"line":53}}}]},{"kind":1,"label":": usize","paddingLeft":false,"paddingRight":false,"position":{"character":19,"line":54},"textEdits":[{"newText":": usize","range":{"end":{"character":19,"line":54},"start":{"character":19,"line":54}}}]},{"kind":1,"label":": usize","paddingLeft":false,"paddingRight":false,"position":{"character":14,"line":56}},{"kind":1,"label":": char","paddingLeft":false,"paddingRight":false,"position":{"character":17,"line":56}},{"kind":2,"label":[{"location":{"range":{"end":{"character":37,"line":1062},"start":{"character":31,"line":1062}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs"},"value":"string:"}],"paddingLeft":false,"paddingRight":true,"position":{"character":45,"line":69}}]
2024-11-23T22:59:04.830 helix_view::document [DEBUG] id 2 modified - last saved: 0, current: 1
2024-11-23T22:59:04.839 helix_view::document [DEBUG] id 2 modified - last saved: 0, current: 1
2024-11-23T22:59:04.982 helix_lsp::transport [INFO] rust-analyzer -> {"jsonrpc":"2.0","method":"completionItem/resolve","params":{"additionalTextEdits":[],"data":{"completion_item_index":130,"imports":[],"position":{"position":{"character":5,"line":20},"textDocument":{"uri":"file:///D:/source/helix/helix-core/src/shellwords.rs"}},"trigger_character":null,"version":11},"deprecated":false,"filterText":"todo!","insertTextFormat":2,"kind":3,"label":"todo!(…)","preselect":true,"sortText":"7fffffff","textEdit":{"insert":{"end":{"character":5,"line":20},"start":{"character":4,"line":20}},"newText":"todo!($0)","replace":{"end":{"character":5,"line":20},"start":{"character":4,"line":20}}}},"id":31}
2024-11-23T22:59:04.999 helix_lsp::transport [INFO] rust-analyzer <- {"jsonrpc":"2.0","id":31,"result":{"label":"DoubleEndedIterator","kind":8,"documentation":{"kind":"markdown","value":"An iterator able to yield elements from both ends.\n\nSomething that implements `DoubleEndedIterator` has one extra capability\nover something that implements [`Iterator`]: the ability to also take\n`Item`s from the back, as well as the front.\n\nIt is important to note that both back and forth work on the same range,\nand do not cross: iteration is over when they meet in the middle.\n\nIn a similar fashion to the [`Iterator`] protocol, once a\n`DoubleEndedIterator` returns [`None`] from a [`next_back()`], calling it\nagain may or may not ever return [`Some`] again. [`next()`] and\n[`next_back()`] are interchangeable for this purpose.\n\n[`next_back()`]: DoubleEndedIterator::next_back\n[`next()`]: Iterator::next\n\n# Examples\n\nBasic usage:\n\n```rust\nlet numbers = vec![1, 2, 3, 4, 5, 6];\n\nlet mut iter = numbers.iter();\n\nassert_eq!(Some(&1), iter.next());\nassert_eq!(Some(&6), iter.next_back());\nassert_eq!(Some(&5), iter.next_back());\nassert_eq!(Some(&2), iter.next());\nassert_eq!(Some(&3), iter.next());\nassert_eq!(Some(&4), iter.next());\nassert_eq!(None, iter.next());\nassert_eq!(None, iter.next_back());\n```"},"deprecated":false,"preselect":true,"sortText":"7fffffff","filterText":"DoubleEndedIterator","textEdit":{"newText":"DoubleEndedIterator","insert":{"start":{"line":20,"character":4},"end":{"line":20,"character":5}},"replace":{"start":{"line":20,"character":4},"end":{"line":20,"character":6}}},"additionalTextEdits":[]}}
2024-11-23T22:59:05.000 helix_lsp::transport [INFO] rust-analyzer <- {"additionalTextEdits":[],"deprecated":false,"documentation":{"kind":"markdown","value":"An iterator able to yield elements from both ends.\n\nSomething that implements `DoubleEndedIterator` has one extra capability\nover something that implements [`Iterator`]: the ability to also take\n`Item`s from the back, as well as the front.\n\nIt is important to note that both back and forth work on the same range,\nand do not cross: iteration is over when they meet in the middle.\n\nIn a similar fashion to the [`Iterator`] protocol, once a\n`DoubleEndedIterator` returns [`None`] from a [`next_back()`], calling it\nagain may or may not ever return [`Some`] again. [`next()`] and\n[`next_back()`] are interchangeable for this purpose.\n\n[`next_back()`]: DoubleEndedIterator::next_back\n[`next()`]: Iterator::next\n\n# Examples\n\nBasic usage:\n\n```rust\nlet numbers = vec![1, 2, 3, 4, 5, 6];\n\nlet mut iter = numbers.iter();\n\nassert_eq!(Some(&1), iter.next());\nassert_eq!(Some(&6), iter.next_back());\nassert_eq!(Some(&5), iter.next_back());\nassert_eq!(Some(&2), iter.next());\nassert_eq!(Some(&3), iter.next());\nassert_eq!(Some(&4), iter.next());\nassert_eq!(None, iter.next());\nassert_eq!(None, iter.next_back());\n```"},"filterText":"DoubleEndedIterator","kind":8,"label":"DoubleEndedIterator","preselect":true,"sortText":"7fffffff","textEdit":{"insert":{"end":{"character":5,"line":20},"start":{"character":4,"line":20}},"newText":"DoubleEndedIterator","replace":{"end":{"character":6,"line":20},"start":{"character":4,"line":20}}}}
2024-11-23T22:59:05.005 helix_view::document [DEBUG] id 2 modified - last saved: 0, current: 1
2024-11-23T22:59:05.479 helix_view::document [DEBUG] id 2 modified - last saved: 0, current: 1
2024-11-23T22:59:05.504 helix_term::application [DEBUG] received editor event: IdleTimer
2024-11-23T22:59:05.504 helix_lsp::transport [INFO] rust-analyzer -> {"jsonrpc":"2.0","method":"textDocument/inlayHint","params":{"range":{"end":{"character":0,"line":76},"start":{"character":0,"line":0}},"textDocument":{"uri":"file:///D:/source/helix/helix-core/src/shellwords.rs"}},"id":32}
2024-11-23T22:59:05.506 helix_lsp::transport [INFO] rust-analyzer <- {"jsonrpc":"2.0","id":32,"result":[{"position":{"line":4,"character":28},"label":": char","kind":1,"textEdits":[{"range":{"start":{"line":4,"character":28},"end":{"line":4,"character":28}},"newText":": char"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":7,"character":38},"label":[{"value":"init:","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/core/src/iter/traits/iterator.rs","range":{"start":{"line":2575,"character":28},"end":{"line":2575,"character":32}}}}],"kind":2,"paddingLeft":false,"paddingRight":true},{"position":{"line":7,"character":53},"label":[{"value":"f:","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/core/src/iter/traits/iterator.rs","range":{"start":{"line":2575,"character":41},"end":{"line":2575,"character":42}}}}],"kind":2,"paddingLeft":false,"paddingRight":true},{"position":{"line":7,"character":61},"label":[{"value":": "},{"value":"String","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs","range":{"start":{"line":361,"character":11},"end":{"line":361,"character":17}}}}],"kind":1,"textEdits":[{"range":{"start":{"line":7,"character":61},"end":{"line":7,"character":61}},"newText":": String"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":7,"character":64},"label":": char","kind":1,"textEdits":[{"range":{"start":{"line":7,"character":64},"end":{"line":7,"character":64}},"newText":": char"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":9,"character":25},"label":[{"value":"ch:","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs","range":{"start":{"line":1354,"character":27},"end":{"line":1354,"character":29}}}}],"kind":2,"paddingLeft":false,"paddingRight":true},{"position":{"line":11,"character":21},"label":[{"value":"ch:","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs","range":{"start":{"line":1354,"character":27},"end":{"line":1354,"character":29}}}}],"kind":2,"paddingLeft":false,"paddingRight":true},{"position":{"line":168,"character":1},"label":"impl From for Shellwords<'a>","paddingLeft":true,"paddingRight":false},{"position":{"line":167,"character":5},"label":[{"value":"fn from","location":{"uri":"file:///d:/source/helix/helix-core/src/shellwords.rs","range":{"start":{"line":44,"character":7},"end":{"line":44,"character":11}}}}],"paddingLeft":true,"paddingRight":false},{"position":{"line":47,"character":21},"label":[{"value":": "},{"value":"State","location":{"uri":"file:///d:/source/helix/helix-core/src/shellwords.rs","range":{"start":{"line":23,"character":5},"end":{"line":23,"character":10}}}}],"kind":1,"textEdits":[{"range":{"start":{"line":47,"character":21},"end":{"line":47,"character":21}},"newText":": State"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":48,"character":21},"label":[{"value":": "},{"value":"Vec","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/vec/mod.rs","range":{"start":{"line":396,"character":11},"end":{"line":396,"character":14}}}},{"value":"<"},{"value":"Cow","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/borrow.rs","range":{"start":{"line":178,"character":9},"end":{"line":178,"character":12}}}},{"value":"<'a, str>>"}],"kind":1,"textEdits":[{"range":{"start":{"line":48,"character":21},"end":{"line":48,"character":21}},"newText":": Vec<Cow<'a, str>>"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":49,"character":21},"label":[{"value":": "},{"value":"Vec","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/vec/mod.rs","range":{"start":{"line":396,"character":11},"end":{"line":396,"character":14}}}},{"value":"<&str>"}],"kind":1,"textEdits":[{"range":{"start":{"line":49,"character":21},"end":{"line":49,"character":21}},"newText":": Vec<&str>"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":50,"character":23},"label":[{"value":": "},{"value":"String","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs","range":{"start":{"line":361,"character":11},"end":{"line":361,"character":17}}}}],"kind":1,"textEdits":[{"range":{"start":{"line":50,"character":23},"end":{"line":50,"character":23}},"newText":": String"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":52,"character":26},"label":": usize","kind":1,"textEdits":[{"range":{"start":{"line":52,"character":26},"end":{"line":52,"character":26}},"newText":": usize"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":53,"character":31},"label":": usize","kind":1,"textEdits":[{"range":{"start":{"line":53,"character":31},"end":{"line":53,"character":31}},"newText":": usize"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":54,"character":19},"label":": usize","kind":1,"textEdits":[{"range":{"start":{"line":54,"character":19},"end":{"line":54,"character":19}},"newText":": usize"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":56,"character":14},"label":": usize","kind":1,"paddingLeft":false,"paddingRight":false},{"position":{"line":56,"character":17},"label":": char","kind":1,"paddingLeft":false,"paddingRight":false},{"position":{"line":69,"character":45},"label":[{"value":"string:","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs","range":{"start":{"line":1062,"character":31},"end":{"line":1062,"character":37}}}}],"kind":2,"paddingLeft":false,"paddingRight":true}]}
2024-11-23T22:59:05.507 helix_lsp::transport [INFO] rust-analyzer <- [{"kind":1,"label":": char","paddingLeft":false,"paddingRight":false,"position":{"character":28,"line":4},"textEdits":[{"newText":": char","range":{"end":{"character":28,"line":4},"start":{"character":28,"line":4}}}]},{"kind":2,"label":[{"location":{"range":{"end":{"character":32,"line":2575},"start":{"character":28,"line":2575}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/core/src/iter/traits/iterator.rs"},"value":"init:"}],"paddingLeft":false,"paddingRight":true,"position":{"character":38,"line":7}},{"kind":2,"label":[{"location":{"range":{"end":{"character":42,"line":2575},"start":{"character":41,"line":2575}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/core/src/iter/traits/iterator.rs"},"value":"f:"}],"paddingLeft":false,"paddingRight":true,"position":{"character":53,"line":7}},{"kind":1,"label":[{"value":": "},{"location":{"range":{"end":{"character":17,"line":361},"start":{"character":11,"line":361}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs"},"value":"String"}],"paddingLeft":false,"paddingRight":false,"position":{"character":61,"line":7},"textEdits":[{"newText":": String","range":{"end":{"character":61,"line":7},"start":{"character":61,"line":7}}}]},{"kind":1,"label":": char","paddingLeft":false,"paddingRight":false,"position":{"character":64,"line":7},"textEdits":[{"newText":": char","range":{"end":{"character":64,"line":7},"start":{"character":64,"line":7}}}]},{"kind":2,"label":[{"location":{"range":{"end":{"character":29,"line":1354},"start":{"character":27,"line":1354}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs"},"value":"ch:"}],"paddingLeft":false,"paddingRight":true,"position":{"character":25,"line":9}},{"kind":2,"label":[{"location":{"range":{"end":{"character":29,"line":1354},"start":{"character":27,"line":1354}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs"},"value":"ch:"}],"paddingLeft":false,"paddingRight":true,"position":{"character":21,"line":11}},{"label":"impl From for Shellwords<'a>","paddingLeft":true,"paddingRight":false,"position":{"character":1,"line":168}},{"label":[{"location":{"range":{"end":{"character":11,"line":44},"start":{"character":7,"line":44}},"uri":"file:///d:/source/helix/helix-core/src/shellwords.rs"},"value":"fn from"}],"paddingLeft":true,"paddingRight":false,"position":{"character":5,"line":167}},{"kind":1,"label":[{"value":": "},{"location":{"range":{"end":{"character":10,"line":23},"start":{"character":5,"line":23}},"uri":"file:///d:/source/helix/helix-core/src/shellwords.rs"},"value":"State"}],"paddingLeft":false,"paddingRight":false,"position":{"character":21,"line":47},"textEdits":[{"newText":": State","range":{"end":{"character":21,"line":47},"start":{"character":21,"line":47}}}]},{"kind":1,"label":[{"value":": "},{"location":{"range":{"end":{"character":14,"line":396},"start":{"character":11,"line":396}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/vec/mod.rs"},"value":"Vec"},{"value":"<"},{"location":{"range":{"end":{"character":12,"line":178},"start":{"character":9,"line":178}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/borrow.rs"},"value":"Cow"},{"value":"<'a, str>>"}],"paddingLeft":false,"paddingRight":false,"position":{"character":21,"line":48},"textEdits":[{"newText":": Vec<Cow<'a, str>>","range":{"end":{"character":21,"line":48},"start":{"character":21,"line":48}}}]},{"kind":1,"label":[{"value":": "},{"location":{"range":{"end":{"character":14,"line":396},"start":{"character":11,"line":396}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/vec/mod.rs"},"value":"Vec"},{"value":"<&str>"}],"paddingLeft":false,"paddingRight":false,"position":{"character":21,"line":49},"textEdits":[{"newText":": Vec<&str>","range":{"end":{"character":21,"line":49},"start":{"character":21,"line":49}}}]},{"kind":1,"label":[{"value":": "},{"location":{"range":{"end":{"character":17,"line":361},"start":{"character":11,"line":361}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs"},"value":"String"}],"paddingLeft":false,"paddingRight":false,"position":{"character":23,"line":50},"textEdits":[{"newText":": String","range":{"end":{"character":23,"line":50},"start":{"character":23,"line":50}}}]},{"kind":1,"label":": usize","paddingLeft":false,"paddingRight":false,"position":{"character":26,"line":52},"textEdits":[{"newText":": usize","range":{"end":{"character":26,"line":52},"start":{"character":26,"line":52}}}]},{"kind":1,"label":": usize","paddingLeft":false,"paddingRight":false,"position":{"character":31,"line":53},"textEdits":[{"newText":": usize","range":{"end":{"character":31,"line":53},"start":{"character":31,"line":53}}}]},{"kind":1,"label":": usize","paddingLeft":false,"paddingRight":false,"position":{"character":19,"line":54},"textEdits":[{"newText":": usize","range":{"end":{"character":19,"line":54},"start":{"character":19,"line":54}}}]},{"kind":1,"label":": usize","paddingLeft":false,"paddingRight":false,"position":{"character":14,"line":56}},{"kind":1,"label":": char","paddingLeft":false,"paddingRight":false,"position":{"character":17,"line":56}},{"kind":2,"label":[{"location":{"range":{"end":{"character":37,"line":1062},"start":{"character":31,"line":1062}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs"},"value":"string:"}],"paddingLeft":false,"paddingRight":true,"position":{"character":45,"line":69}}]
2024-11-23T22:59:05.513 helix_view::document [DEBUG] id 2 modified - last saved: 0, current: 1
2024-11-23T22:59:05.645 helix_lsp::transport [INFO] rust-analyzer -> {"jsonrpc":"2.0","method":"completionItem/resolve","params":{"additionalTextEdits":[],"data":{"completion_item_index":148,"imports":[],"position":{"position":{"character":5,"line":20},"textDocument":{"uri":"file:///D:/source/helix/helix-core/src/shellwords.rs"}},"trigger_character":null,"version":11},"deprecated":false,"filterText":"toml","kind":9,"label":"toml","preselect":true,"sortText":"7fffffff","textEdit":{"insert":{"end":{"character":5,"line":20},"start":{"character":4,"line":20}},"newText":"toml","replace":{"end":{"character":5,"line":20},"start":{"character":4,"line":20}}}},"id":33}
2024-11-23T22:59:05.651 helix_lsp::transport [INFO] rust-analyzer <- {"jsonrpc":"2.0","id":33,"result":{"label":"PartialEq (alias ==, !=)","kind":8,"documentation":{"kind":"markdown","value":"Trait for comparisons using the equality operator.\n\nImplementing this trait for types provides the `==` and `!=` operators for\nthose types.\n\n`x.eq(y)` can also be written `x == y`, and `x.ne(y)` can be written `x != y`.\nWe use the easier-to-read infix notation in the remainder of this documentation.\n\nThis trait allows for comparisons using the equality operator, for types\nthat do not have a full equivalence relation. For example, in floating point\nnumbers `NaN != NaN`, so floating point types implement `PartialEq` but not\n[`trait@Eq`]. Formally speaking, when `Rhs == Self`, this trait corresponds\nto a [partial equivalence relation].\n\n[partial equivalence relation]: https://en.wikipedia.org/wiki/Partial_equivalence_relation\n\nImplementations must ensure that `eq` and `ne` are consistent with each other:\n\n- `a != b` if and only if `!(a == b)`.\n\nThe default implementation of `ne` provides this consistency and is almost\nalways sufficient. It should not be overridden without very good reason.\n\nIf [`PartialOrd`] or [`Ord`] are also implemented for `Self` and `Rhs`, their methods must also\nbe consistent with `PartialEq` (see the documentation of those traits for the exact\nrequirements). It's easy to accidentally make them disagree by deriving some of the traits and\nmanually implementing others.\n\nThe equality relation `==` must satisfy the following conditions\n(for all `a`, `b`, `c` of type `A`, `B`, `C`):\n\n- **Symmetry**: if `A: PartialEq<B>` and `B: PartialEq<A>`, then **`a == b`\n  implies `b == a`**; and\n\n- **Transitivity**: if `A: PartialEq<B>` and `B: PartialEq<C>` and `A:\n  PartialEq<C>`, then **`a == b` and `b == c` implies `a == c`**.\n  This must also work for longer chains, such as when `A: PartialEq<B>`, `B: PartialEq<C>`,\n  `C: PartialEq<D>`, and `A: PartialEq<D>` all exist.\n\nNote that the `B: PartialEq<A>` (symmetric) and `A: PartialEq<C>`\n(transitive) impls are not forced to exist, but these requirements apply\nwhenever they do exist.\n\nViolating these requirements is a logic error. The behavior resulting from a logic error is not\nspecified, but users of the trait must ensure that such logic errors do *not* result in\nundefined behavior. This means that `unsafe` code **must not** rely on the correctness of these\nmethods.\n\n## Cross-crate considerations\n\nUpholding the requirements stated above can become tricky when one crate implements `PartialEq`\nfor a type of another crate (i.e., to allow comparing one of its own types with a type from the\nstandard library). The recommendation is to never implement this trait for a foreign type. In\nother words, such a crate should do `impl PartialEq<ForeignType> for LocalType`, but it should\n*not* do `impl PartialEq<LocalType> for ForeignType`.\n\nThis avoids the problem of transitive chains that criss-cross crate boundaries: for all local\ntypes `T`, you may assume that no other crate will add `impl`s that allow comparing `T == U`. In\nother words, if other crates add `impl`s that allow building longer transitive chains `U1 == ...\n== T == V1 == ...`, then all the types that appear to the right of `T` must be types that the\ncrate defining `T` already knows about. This rules out transitive chains where downstream crates\ncan add new `impl`s that \"stitch together\" comparisons of foreign types in ways that violate\ntransitivity.\n\nNot having such foreign `impl`s also avoids forward compatibility issues where one crate adding\nmore `PartialEq` implementations can cause build failures in downstream crates.\n\n## Derivable\n\nThis trait can be used with `#[derive]`. When `derive`d on structs, two\ninstances are equal if all fields are equal, and not equal if any fields\nare not equal. When `derive`d on enums, two instances are equal if they\nare the same variant and all fields are equal.\n\n## How can I implement `PartialEq`?\n\nAn example implementation for a domain in which two books are considered\nthe same book if their ISBN matches, even if the formats differ:\n\n```rust\nenum BookFormat {\n    Paperback,\n    Hardback,\n    Ebook,\n}\n\nstruct Book {\n    isbn: i32,\n    format: BookFormat,\n}\n\nimpl PartialEq for Book {\n    fn eq(&self, other: &Self) -> bool {\n        self.isbn == other.isbn\n    }\n}\n\nlet b1 = Book { isbn: 3, format: BookFormat::Paperback };\nlet b2 = Book { isbn: 3, format: BookFormat::Ebook };\nlet b3 = Book { isbn: 10, format: BookFormat::Paperback };\n\nassert!(b1 == b2);\nassert!(b1 != b3);\n```\n\n## How can I compare two different types?\n\nThe type you can compare with is controlled by `PartialEq`'s type parameter.\nFor example, let's tweak our previous code a bit:\n\n```rust\n// The derive implements <BookFormat> == <BookFormat> comparisons\n#[derive(PartialEq)]\nenum BookFormat {\n    Paperback,\n    Hardback,\n    Ebook,\n}\n\nstruct Book {\n    isbn: i32,\n    format: BookFormat,\n}\n\n// Implement <Book> == <BookFormat> comparisons\nimpl PartialEq<BookFormat> for Book {\n    fn eq(&self, other: &BookFormat) -> bool {\n        self.format == *other\n    }\n}\n\n// Implement <BookFormat> == <Book> comparisons\nimpl PartialEq<Book> for BookFormat {\n    fn eq(&self, other: &Book) -> bool {\n        *self == other.format\n    }\n}\n\nlet b1 = Book { isbn: 3, format: BookFormat::Paperback };\n\nassert!(b1 == BookFormat::Paperback);\nassert!(BookFormat::Ebook != b1);\n```\n\nBy changing `impl PartialEq for Book` to `impl PartialEq<BookFormat> for Book`,\nwe allow `BookFormat`s to be compared with `Book`s.\n\nA comparison like the one above, which ignores some fields of the struct,\ncan be dangerous. It can easily lead to an unintended violation of the\nrequirements for a partial equivalence relation. For example, if we kept\nthe above implementation of `PartialEq<Book>` for `BookFormat` and added an\nimplementation of `PartialEq<Book>` for `Book` (either via a `#[derive]` or\nvia the manual implementation from the first example) then the result would\nviolate transitivity:\n\n```rust\n#[derive(PartialEq)]\nenum BookFormat {\n    Paperback,\n    Hardback,\n    Ebook,\n}\n\n#[derive(PartialEq)]\nstruct Book {\n    isbn: i32,\n    format: BookFormat,\n}\n\nimpl PartialEq<BookFormat> for Book {\n    fn eq(&self, other: &BookFormat) -> bool {\n        self.format == *other\n    }\n}\n\nimpl PartialEq<Book> for BookFormat {\n    fn eq(&self, other: &Book) -> bool {\n        *self == other.format\n    }\n}\n\nfn main() {\n    let b1 = Book { isbn: 1, format: BookFormat::Paperback };\n    let b2 = Book { isbn: 2, format: BookFormat::Paperback };\n\n    assert!(b1 == BookFormat::Paperback);\n    assert!(BookFormat::Paperback == b2);\n\n    // The following should hold by transitivity but doesn't.\n    assert!(b1 == b2); // <-- PANICS\n}\n```\n\n# Examples\n\n```rust\nlet x: u32 = 0;\nlet y: u32 = 1;\n\nassert_eq!(x == y, false);\nassert_eq!(x.eq(&y), false);\n```\n\n[`eq`]: PartialEq::eq\n[`ne`]: PartialEq::ne"},"deprecated":false,"preselect":true,"sortText":"7fffffff","filterText":"PartialEq","textEdit":{"newText":"PartialEq","insert":{"start":{"line":20,"character":4},"end":{"line":20,"character":5}},"replace":{"start":{"line":20,"character":4},"end":{"line":20,"character":6}}},"additionalTextEdits":[]}}
2024-11-23T22:59:05.652 helix_lsp::transport [INFO] rust-analyzer <- {"additionalTextEdits":[],"deprecated":false,"documentation":{"kind":"markdown","value":"Trait for comparisons using the equality operator.\n\nImplementing this trait for types provides the `==` and `!=` operators for\nthose types.\n\n`x.eq(y)` can also be written `x == y`, and `x.ne(y)` can be written `x != y`.\nWe use the easier-to-read infix notation in the remainder of this documentation.\n\nThis trait allows for comparisons using the equality operator, for types\nthat do not have a full equivalence relation. For example, in floating point\nnumbers `NaN != NaN`, so floating point types implement `PartialEq` but not\n[`trait@Eq`]. Formally speaking, when `Rhs == Self`, this trait corresponds\nto a [partial equivalence relation].\n\n[partial equivalence relation]: https://en.wikipedia.org/wiki/Partial_equivalence_relation\n\nImplementations must ensure that `eq` and `ne` are consistent with each other:\n\n- `a != b` if and only if `!(a == b)`.\n\nThe default implementation of `ne` provides this consistency and is almost\nalways sufficient. It should not be overridden without very good reason.\n\nIf [`PartialOrd`] or [`Ord`] are also implemented for `Self` and `Rhs`, their methods must also\nbe consistent with `PartialEq` (see the documentation of those traits for the exact\nrequirements). It's easy to accidentally make them disagree by deriving some of the traits and\nmanually implementing others.\n\nThe equality relation `==` must satisfy the following conditions\n(for all `a`, `b`, `c` of type `A`, `B`, `C`):\n\n- **Symmetry**: if `A: PartialEq<B>` and `B: PartialEq<A>`, then **`a == b`\n  implies `b == a`**; and\n\n- **Transitivity**: if `A: PartialEq<B>` and `B: PartialEq<C>` and `A:\n  PartialEq<C>`, then **`a == b` and `b == c` implies `a == c`**.\n  This must also work for longer chains, such as when `A: PartialEq<B>`, `B: PartialEq<C>`,\n  `C: PartialEq<D>`, and `A: PartialEq<D>` all exist.\n\nNote that the `B: PartialEq<A>` (symmetric) and `A: PartialEq<C>`\n(transitive) impls are not forced to exist, but these requirements apply\nwhenever they do exist.\n\nViolating these requirements is a logic error. The behavior resulting from a logic error is not\nspecified, but users of the trait must ensure that such logic errors do *not* result in\nundefined behavior. This means that `unsafe` code **must not** rely on the correctness of these\nmethods.\n\n## Cross-crate considerations\n\nUpholding the requirements stated above can become tricky when one crate implements `PartialEq`\nfor a type of another crate (i.e., to allow comparing one of its own types with a type from the\nstandard library). The recommendation is to never implement this trait for a foreign type. In\nother words, such a crate should do `impl PartialEq<ForeignType> for LocalType`, but it should\n*not* do `impl PartialEq<LocalType> for ForeignType`.\n\nThis avoids the problem of transitive chains that criss-cross crate boundaries: for all local\ntypes `T`, you may assume that no other crate will add `impl`s that allow comparing `T == U`. In\nother words, if other crates add `impl`s that allow building longer transitive chains `U1 == ...\n== T == V1 == ...`, then all the types that appear to the right of `T` must be types that the\ncrate defining `T` already knows about. This rules out transitive chains where downstream crates\ncan add new `impl`s that \"stitch together\" comparisons of foreign types in ways that violate\ntransitivity.\n\nNot having such foreign `impl`s also avoids forward compatibility issues where one crate adding\nmore `PartialEq` implementations can cause build failures in downstream crates.\n\n## Derivable\n\nThis trait can be used with `#[derive]`. When `derive`d on structs, two\ninstances are equal if all fields are equal, and not equal if any fields\nare not equal. When `derive`d on enums, two instances are equal if they\nare the same variant and all fields are equal.\n\n## How can I implement `PartialEq`?\n\nAn example implementation for a domain in which two books are considered\nthe same book if their ISBN matches, even if the formats differ:\n\n```rust\nenum BookFormat {\n    Paperback,\n    Hardback,\n    Ebook,\n}\n\nstruct Book {\n    isbn: i32,\n    format: BookFormat,\n}\n\nimpl PartialEq for Book {\n    fn eq(&self, other: &Self) -> bool {\n        self.isbn == other.isbn\n    }\n}\n\nlet b1 = Book { isbn: 3, format: BookFormat::Paperback };\nlet b2 = Book { isbn: 3, format: BookFormat::Ebook };\nlet b3 = Book { isbn: 10, format: BookFormat::Paperback };\n\nassert!(b1 == b2);\nassert!(b1 != b3);\n```\n\n## How can I compare two different types?\n\nThe type you can compare with is controlled by `PartialEq`'s type parameter.\nFor example, let's tweak our previous code a bit:\n\n```rust\n// The derive implements <BookFormat> == <BookFormat> comparisons\n#[derive(PartialEq)]\nenum BookFormat {\n    Paperback,\n    Hardback,\n    Ebook,\n}\n\nstruct Book {\n    isbn: i32,\n    format: BookFormat,\n}\n\n// Implement <Book> == <BookFormat> comparisons\nimpl PartialEq<BookFormat> for Book {\n    fn eq(&self, other: &BookFormat) -> bool {\n        self.format == *other\n    }\n}\n\n// Implement <BookFormat> == <Book> comparisons\nimpl PartialEq<Book> for BookFormat {\n    fn eq(&self, other: &Book) -> bool {\n        *self == other.format\n    }\n}\n\nlet b1 = Book { isbn: 3, format: BookFormat::Paperback };\n\nassert!(b1 == BookFormat::Paperback);\nassert!(BookFormat::Ebook != b1);\n```\n\nBy changing `impl PartialEq for Book` to `impl PartialEq<BookFormat> for Book`,\nwe allow `BookFormat`s to be compared with `Book`s.\n\nA comparison like the one above, which ignores some fields of the struct,\ncan be dangerous. It can easily lead to an unintended violation of the\nrequirements for a partial equivalence relation. For example, if we kept\nthe above implementation of `PartialEq<Book>` for `BookFormat` and added an\nimplementation of `PartialEq<Book>` for `Book` (either via a `#[derive]` or\nvia the manual implementation from the first example) then the result would\nviolate transitivity:\n\n```rust\n#[derive(PartialEq)]\nenum BookFormat {\n    Paperback,\n    Hardback,\n    Ebook,\n}\n\n#[derive(PartialEq)]\nstruct Book {\n    isbn: i32,\n    format: BookFormat,\n}\n\nimpl PartialEq<BookFormat> for Book {\n    fn eq(&self, other: &BookFormat) -> bool {\n        self.format == *other\n    }\n}\n\nimpl PartialEq<Book> for BookFormat {\n    fn eq(&self, other: &Book) -> bool {\n        *self == other.format\n    }\n}\n\nfn main() {\n    let b1 = Book { isbn: 1, format: BookFormat::Paperback };\n    let b2 = Book { isbn: 2, format: BookFormat::Paperback };\n\n    assert!(b1 == BookFormat::Paperback);\n    assert!(BookFormat::Paperback == b2);\n\n    // The following should hold by transitivity but doesn't.\n    assert!(b1 == b2); // <-- PANICS\n}\n```\n\n# Examples\n\n```rust\nlet x: u32 = 0;\nlet y: u32 = 1;\n\nassert_eq!(x == y, false);\nassert_eq!(x.eq(&y), false);\n```\n\n[`eq`]: PartialEq::eq\n[`ne`]: PartialEq::ne"},"filterText":"PartialEq","kind":8,"label":"PartialEq (alias ==, !=)","preselect":true,"sortText":"7fffffff","textEdit":{"insert":{"end":{"character":5,"line":20},"start":{"character":4,"line":20}},"newText":"PartialEq","replace":{"end":{"character":6,"line":20},"start":{"character":4,"line":20}}}}
2024-11-23T22:59:05.657 helix_view::document [DEBUG] id 2 modified - last saved: 0, current: 1
2024-11-23T22:59:06.521 helix_view::document [DEBUG] id 2 modified - last saved: 0, current: 1
2024-11-23T22:59:06.545 helix_term::application [DEBUG] received editor event: IdleTimer
2024-11-23T22:59:06.546 helix_lsp::transport [INFO] rust-analyzer -> {"jsonrpc":"2.0","method":"textDocument/inlayHint","params":{"range":{"end":{"character":0,"line":76},"start":{"character":0,"line":0}},"textDocument":{"uri":"file:///D:/source/helix/helix-core/src/shellwords.rs"}},"id":34}
2024-11-23T22:59:06.547 helix_lsp::transport [INFO] rust-analyzer <- {"jsonrpc":"2.0","id":34,"result":[{"position":{"line":4,"character":28},"label":": char","kind":1,"textEdits":[{"range":{"start":{"line":4,"character":28},"end":{"line":4,"character":28}},"newText":": char"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":7,"character":38},"label":[{"value":"init:","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/core/src/iter/traits/iterator.rs","range":{"start":{"line":2575,"character":28},"end":{"line":2575,"character":32}}}}],"kind":2,"paddingLeft":false,"paddingRight":true},{"position":{"line":7,"character":53},"label":[{"value":"f:","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/core/src/iter/traits/iterator.rs","range":{"start":{"line":2575,"character":41},"end":{"line":2575,"character":42}}}}],"kind":2,"paddingLeft":false,"paddingRight":true},{"position":{"line":7,"character":61},"label":[{"value":": "},{"value":"String","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs","range":{"start":{"line":361,"character":11},"end":{"line":361,"character":17}}}}],"kind":1,"textEdits":[{"range":{"start":{"line":7,"character":61},"end":{"line":7,"character":61}},"newText":": String"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":7,"character":64},"label":": char","kind":1,"textEdits":[{"range":{"start":{"line":7,"character":64},"end":{"line":7,"character":64}},"newText":": char"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":9,"character":25},"label":[{"value":"ch:","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs","range":{"start":{"line":1354,"character":27},"end":{"line":1354,"character":29}}}}],"kind":2,"paddingLeft":false,"paddingRight":true},{"position":{"line":11,"character":21},"label":[{"value":"ch:","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs","range":{"start":{"line":1354,"character":27},"end":{"line":1354,"character":29}}}}],"kind":2,"paddingLeft":false,"paddingRight":true},{"position":{"line":168,"character":1},"label":"impl From for Shellwords<'a>","paddingLeft":true,"paddingRight":false},{"position":{"line":167,"character":5},"label":[{"value":"fn from","location":{"uri":"file:///d:/source/helix/helix-core/src/shellwords.rs","range":{"start":{"line":44,"character":7},"end":{"line":44,"character":11}}}}],"paddingLeft":true,"paddingRight":false},{"position":{"line":47,"character":21},"label":[{"value":": "},{"value":"State","location":{"uri":"file:///d:/source/helix/helix-core/src/shellwords.rs","range":{"start":{"line":23,"character":5},"end":{"line":23,"character":10}}}}],"kind":1,"textEdits":[{"range":{"start":{"line":47,"character":21},"end":{"line":47,"character":21}},"newText":": State"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":48,"character":21},"label":[{"value":": "},{"value":"Vec","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/vec/mod.rs","range":{"start":{"line":396,"character":11},"end":{"line":396,"character":14}}}},{"value":"<"},{"value":"Cow","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/borrow.rs","range":{"start":{"line":178,"character":9},"end":{"line":178,"character":12}}}},{"value":"<'a, str>>"}],"kind":1,"textEdits":[{"range":{"start":{"line":48,"character":21},"end":{"line":48,"character":21}},"newText":": Vec<Cow<'a, str>>"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":49,"character":21},"label":[{"value":": "},{"value":"Vec","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/vec/mod.rs","range":{"start":{"line":396,"character":11},"end":{"line":396,"character":14}}}},{"value":"<&str>"}],"kind":1,"textEdits":[{"range":{"start":{"line":49,"character":21},"end":{"line":49,"character":21}},"newText":": Vec<&str>"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":50,"character":23},"label":[{"value":": "},{"value":"String","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs","range":{"start":{"line":361,"character":11},"end":{"line":361,"character":17}}}}],"kind":1,"textEdits":[{"range":{"start":{"line":50,"character":23},"end":{"line":50,"character":23}},"newText":": String"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":52,"character":26},"label":": usize","kind":1,"textEdits":[{"range":{"start":{"line":52,"character":26},"end":{"line":52,"character":26}},"newText":": usize"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":53,"character":31},"label":": usize","kind":1,"textEdits":[{"range":{"start":{"line":53,"character":31},"end":{"line":53,"character":31}},"newText":": usize"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":54,"character":19},"label":": usize","kind":1,"textEdits":[{"range":{"start":{"line":54,"character":19},"end":{"line":54,"character":19}},"newText":": usize"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":56,"character":14},"label":": usize","kind":1,"paddingLeft":false,"paddingRight":false},{"position":{"line":56,"character":17},"label":": char","kind":1,"paddingLeft":false,"paddingRight":false},{"position":{"line":69,"character":45},"label":[{"value":"string:","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs","range":{"start":{"line":1062,"character":31},"end":{"line":1062,"character":37}}}}],"kind":2,"paddingLeft":false,"paddingRight":true}]}
2024-11-23T22:59:06.548 helix_lsp::transport [INFO] rust-analyzer <- [{"kind":1,"label":": char","paddingLeft":false,"paddingRight":false,"position":{"character":28,"line":4},"textEdits":[{"newText":": char","range":{"end":{"character":28,"line":4},"start":{"character":28,"line":4}}}]},{"kind":2,"label":[{"location":{"range":{"end":{"character":32,"line":2575},"start":{"character":28,"line":2575}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/core/src/iter/traits/iterator.rs"},"value":"init:"}],"paddingLeft":false,"paddingRight":true,"position":{"character":38,"line":7}},{"kind":2,"label":[{"location":{"range":{"end":{"character":42,"line":2575},"start":{"character":41,"line":2575}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/core/src/iter/traits/iterator.rs"},"value":"f:"}],"paddingLeft":false,"paddingRight":true,"position":{"character":53,"line":7}},{"kind":1,"label":[{"value":": "},{"location":{"range":{"end":{"character":17,"line":361},"start":{"character":11,"line":361}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs"},"value":"String"}],"paddingLeft":false,"paddingRight":false,"position":{"character":61,"line":7},"textEdits":[{"newText":": String","range":{"end":{"character":61,"line":7},"start":{"character":61,"line":7}}}]},{"kind":1,"label":": char","paddingLeft":false,"paddingRight":false,"position":{"character":64,"line":7},"textEdits":[{"newText":": char","range":{"end":{"character":64,"line":7},"start":{"character":64,"line":7}}}]},{"kind":2,"label":[{"location":{"range":{"end":{"character":29,"line":1354},"start":{"character":27,"line":1354}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs"},"value":"ch:"}],"paddingLeft":false,"paddingRight":true,"position":{"character":25,"line":9}},{"kind":2,"label":[{"location":{"range":{"end":{"character":29,"line":1354},"start":{"character":27,"line":1354}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs"},"value":"ch:"}],"paddingLeft":false,"paddingRight":true,"position":{"character":21,"line":11}},{"label":"impl From for Shellwords<'a>","paddingLeft":true,"paddingRight":false,"position":{"character":1,"line":168}},{"label":[{"location":{"range":{"end":{"character":11,"line":44},"start":{"character":7,"line":44}},"uri":"file:///d:/source/helix/helix-core/src/shellwords.rs"},"value":"fn from"}],"paddingLeft":true,"paddingRight":false,"position":{"character":5,"line":167}},{"kind":1,"label":[{"value":": "},{"location":{"range":{"end":{"character":10,"line":23},"start":{"character":5,"line":23}},"uri":"file:///d:/source/helix/helix-core/src/shellwords.rs"},"value":"State"}],"paddingLeft":false,"paddingRight":false,"position":{"character":21,"line":47},"textEdits":[{"newText":": State","range":{"end":{"character":21,"line":47},"start":{"character":21,"line":47}}}]},{"kind":1,"label":[{"value":": "},{"location":{"range":{"end":{"character":14,"line":396},"start":{"character":11,"line":396}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/vec/mod.rs"},"value":"Vec"},{"value":"<"},{"location":{"range":{"end":{"character":12,"line":178},"start":{"character":9,"line":178}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/borrow.rs"},"value":"Cow"},{"value":"<'a, str>>"}],"paddingLeft":false,"paddingRight":false,"position":{"character":21,"line":48},"textEdits":[{"newText":": Vec<Cow<'a, str>>","range":{"end":{"character":21,"line":48},"start":{"character":21,"line":48}}}]},{"kind":1,"label":[{"value":": "},{"location":{"range":{"end":{"character":14,"line":396},"start":{"character":11,"line":396}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/vec/mod.rs"},"value":"Vec"},{"value":"<&str>"}],"paddingLeft":false,"paddingRight":false,"position":{"character":21,"line":49},"textEdits":[{"newText":": Vec<&str>","range":{"end":{"character":21,"line":49},"start":{"character":21,"line":49}}}]},{"kind":1,"label":[{"value":": "},{"location":{"range":{"end":{"character":17,"line":361},"start":{"character":11,"line":361}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs"},"value":"String"}],"paddingLeft":false,"paddingRight":false,"position":{"character":23,"line":50},"textEdits":[{"newText":": String","range":{"end":{"character":23,"line":50},"start":{"character":23,"line":50}}}]},{"kind":1,"label":": usize","paddingLeft":false,"paddingRight":false,"position":{"character":26,"line":52},"textEdits":[{"newText":": usize","range":{"end":{"character":26,"line":52},"start":{"character":26,"line":52}}}]},{"kind":1,"label":": usize","paddingLeft":false,"paddingRight":false,"position":{"character":31,"line":53},"textEdits":[{"newText":": usize","range":{"end":{"character":31,"line":53},"start":{"character":31,"line":53}}}]},{"kind":1,"label":": usize","paddingLeft":false,"paddingRight":false,"position":{"character":19,"line":54},"textEdits":[{"newText":": usize","range":{"end":{"character":19,"line":54},"start":{"character":19,"line":54}}}]},{"kind":1,"label":": usize","paddingLeft":false,"paddingRight":false,"position":{"character":14,"line":56}},{"kind":1,"label":": char","paddingLeft":false,"paddingRight":false,"position":{"character":17,"line":56}},{"kind":2,"label":[{"location":{"range":{"end":{"character":37,"line":1062},"start":{"character":31,"line":1062}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs"},"value":"string:"}],"paddingLeft":false,"paddingRight":true,"position":{"character":45,"line":69}}]
2024-11-23T22:59:06.555 helix_view::document [DEBUG] id 2 modified - last saved: 0, current: 1
2024-11-23T22:59:06.687 helix_lsp::transport [INFO] rust-analyzer -> {"jsonrpc":"2.0","method":"completionItem/resolve","params":{"additionalTextEdits":[],"data":{"completion_item_index":221,"imports":[],"position":{"position":{"character":5,"line":20},"textDocument":{"uri":"file:///D:/source/helix/helix-core/src/shellwords.rs"}},"trigger_character":null,"version":11},"deprecated":false,"filterText":"ToOwned","kind":8,"label":"ToOwned","preselect":true,"sortText":"7fffffff","textEdit":{"insert":{"end":{"character":5,"line":20},"start":{"character":4,"line":20}},"newText":"ToOwned","replace":{"end":{"character":5,"line":20},"start":{"character":4,"line":20}}}},"id":35}
2024-11-23T22:59:06.693 helix_lsp::transport [INFO] rust-analyzer <- {"jsonrpc":"2.0","id":35,"result":{"label":"ToOwned","kind":8,"deprecated":false,"preselect":true,"sortText":"7fffffff","filterText":"ToOwned","textEdit":{"newText":"ToOwned","insert":{"start":{"line":20,"character":4},"end":{"line":20,"character":5}},"replace":{"start":{"line":20,"character":4},"end":{"line":20,"character":5}}},"additionalTextEdits":[]}}
2024-11-23T22:59:06.693 helix_lsp::transport [INFO] rust-analyzer <- {"additionalTextEdits":[],"deprecated":false,"filterText":"ToOwned","kind":8,"label":"ToOwned","preselect":true,"sortText":"7fffffff","textEdit":{"insert":{"end":{"character":5,"line":20},"start":{"character":4,"line":20}},"newText":"ToOwned","replace":{"end":{"character":5,"line":20},"start":{"character":4,"line":20}}}}
2024-11-23T22:59:06.699 helix_view::document [DEBUG] id 2 modified - last saved: 0, current: 1
2024-11-23T22:59:07.399 helix_vcs::diff::worker [INFO] Diff computation timed out, update of diffs might appear delayed
2024-11-23T22:59:07.404 helix_view::document [DEBUG] id 2 modified - last saved: 0, current: 1
2024-11-23T22:59:07.430 helix_term::application [DEBUG] received editor event: IdleTimer
2024-11-23T22:59:07.430 helix_lsp::transport [INFO] rust-analyzer -> {"jsonrpc":"2.0","method":"textDocument/inlayHint","params":{"range":{"end":{"character":0,"line":76},"start":{"character":0,"line":0}},"textDocument":{"uri":"file:///D:/source/helix/helix-core/src/shellwords.rs"}},"id":36}
2024-11-23T22:59:07.432 helix_lsp::transport [INFO] rust-analyzer <- {"jsonrpc":"2.0","id":36,"result":[{"position":{"line":4,"character":28},"label":": char","kind":1,"textEdits":[{"range":{"start":{"line":4,"character":28},"end":{"line":4,"character":28}},"newText":": char"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":7,"character":38},"label":[{"value":"init:","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/core/src/iter/traits/iterator.rs","range":{"start":{"line":2575,"character":28},"end":{"line":2575,"character":32}}}}],"kind":2,"paddingLeft":false,"paddingRight":true},{"position":{"line":7,"character":53},"label":[{"value":"f:","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/core/src/iter/traits/iterator.rs","range":{"start":{"line":2575,"character":41},"end":{"line":2575,"character":42}}}}],"kind":2,"paddingLeft":false,"paddingRight":true},{"position":{"line":7,"character":61},"label":[{"value":": "},{"value":"String","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs","range":{"start":{"line":361,"character":11},"end":{"line":361,"character":17}}}}],"kind":1,"textEdits":[{"range":{"start":{"line":7,"character":61},"end":{"line":7,"character":61}},"newText":": String"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":7,"character":64},"label":": char","kind":1,"textEdits":[{"range":{"start":{"line":7,"character":64},"end":{"line":7,"character":64}},"newText":": char"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":9,"character":25},"label":[{"value":"ch:","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs","range":{"start":{"line":1354,"character":27},"end":{"line":1354,"character":29}}}}],"kind":2,"paddingLeft":false,"paddingRight":true},{"position":{"line":11,"character":21},"label":[{"value":"ch:","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs","range":{"start":{"line":1354,"character":27},"end":{"line":1354,"character":29}}}}],"kind":2,"paddingLeft":false,"paddingRight":true},{"position":{"line":168,"character":1},"label":"impl From for Shellwords<'a>","paddingLeft":true,"paddingRight":false},{"position":{"line":167,"character":5},"label":[{"value":"fn from","location":{"uri":"file:///d:/source/helix/helix-core/src/shellwords.rs","range":{"start":{"line":44,"character":7},"end":{"line":44,"character":11}}}}],"paddingLeft":true,"paddingRight":false},{"position":{"line":47,"character":21},"label":[{"value":": "},{"value":"State","location":{"uri":"file:///d:/source/helix/helix-core/src/shellwords.rs","range":{"start":{"line":23,"character":5},"end":{"line":23,"character":10}}}}],"kind":1,"textEdits":[{"range":{"start":{"line":47,"character":21},"end":{"line":47,"character":21}},"newText":": State"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":48,"character":21},"label":[{"value":": "},{"value":"Vec","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/vec/mod.rs","range":{"start":{"line":396,"character":11},"end":{"line":396,"character":14}}}},{"value":"<"},{"value":"Cow","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/borrow.rs","range":{"start":{"line":178,"character":9},"end":{"line":178,"character":12}}}},{"value":"<'a, str>>"}],"kind":1,"textEdits":[{"range":{"start":{"line":48,"character":21},"end":{"line":48,"character":21}},"newText":": Vec<Cow<'a, str>>"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":49,"character":21},"label":[{"value":": "},{"value":"Vec","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/vec/mod.rs","range":{"start":{"line":396,"character":11},"end":{"line":396,"character":14}}}},{"value":"<&str>"}],"kind":1,"textEdits":[{"range":{"start":{"line":49,"character":21},"end":{"line":49,"character":21}},"newText":": Vec<&str>"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":50,"character":23},"label":[{"value":": "},{"value":"String","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs","range":{"start":{"line":361,"character":11},"end":{"line":361,"character":17}}}}],"kind":1,"textEdits":[{"range":{"start":{"line":50,"character":23},"end":{"line":50,"character":23}},"newText":": String"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":52,"character":26},"label":": usize","kind":1,"textEdits":[{"range":{"start":{"line":52,"character":26},"end":{"line":52,"character":26}},"newText":": usize"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":53,"character":31},"label":": usize","kind":1,"textEdits":[{"range":{"start":{"line":53,"character":31},"end":{"line":53,"character":31}},"newText":": usize"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":54,"character":19},"label":": usize","kind":1,"textEdits":[{"range":{"start":{"line":54,"character":19},"end":{"line":54,"character":19}},"newText":": usize"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":56,"character":14},"label":": usize","kind":1,"paddingLeft":false,"paddingRight":false},{"position":{"line":56,"character":17},"label":": char","kind":1,"paddingLeft":false,"paddingRight":false},{"position":{"line":69,"character":45},"label":[{"value":"string:","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs","range":{"start":{"line":1062,"character":31},"end":{"line":1062,"character":37}}}}],"kind":2,"paddingLeft":false,"paddingRight":true}]}
2024-11-23T22:59:07.432 helix_lsp::transport [INFO] rust-analyzer <- [{"kind":1,"label":": char","paddingLeft":false,"paddingRight":false,"position":{"character":28,"line":4},"textEdits":[{"newText":": char","range":{"end":{"character":28,"line":4},"start":{"character":28,"line":4}}}]},{"kind":2,"label":[{"location":{"range":{"end":{"character":32,"line":2575},"start":{"character":28,"line":2575}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/core/src/iter/traits/iterator.rs"},"value":"init:"}],"paddingLeft":false,"paddingRight":true,"position":{"character":38,"line":7}},{"kind":2,"label":[{"location":{"range":{"end":{"character":42,"line":2575},"start":{"character":41,"line":2575}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/core/src/iter/traits/iterator.rs"},"value":"f:"}],"paddingLeft":false,"paddingRight":true,"position":{"character":53,"line":7}},{"kind":1,"label":[{"value":": "},{"location":{"range":{"end":{"character":17,"line":361},"start":{"character":11,"line":361}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs"},"value":"String"}],"paddingLeft":false,"paddingRight":false,"position":{"character":61,"line":7},"textEdits":[{"newText":": String","range":{"end":{"character":61,"line":7},"start":{"character":61,"line":7}}}]},{"kind":1,"label":": char","paddingLeft":false,"paddingRight":false,"position":{"character":64,"line":7},"textEdits":[{"newText":": char","range":{"end":{"character":64,"line":7},"start":{"character":64,"line":7}}}]},{"kind":2,"label":[{"location":{"range":{"end":{"character":29,"line":1354},"start":{"character":27,"line":1354}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs"},"value":"ch:"}],"paddingLeft":false,"paddingRight":true,"position":{"character":25,"line":9}},{"kind":2,"label":[{"location":{"range":{"end":{"character":29,"line":1354},"start":{"character":27,"line":1354}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs"},"value":"ch:"}],"paddingLeft":false,"paddingRight":true,"position":{"character":21,"line":11}},{"label":"impl From for Shellwords<'a>","paddingLeft":true,"paddingRight":false,"position":{"character":1,"line":168}},{"label":[{"location":{"range":{"end":{"character":11,"line":44},"start":{"character":7,"line":44}},"uri":"file:///d:/source/helix/helix-core/src/shellwords.rs"},"value":"fn from"}],"paddingLeft":true,"paddingRight":false,"position":{"character":5,"line":167}},{"kind":1,"label":[{"value":": "},{"location":{"range":{"end":{"character":10,"line":23},"start":{"character":5,"line":23}},"uri":"file:///d:/source/helix/helix-core/src/shellwords.rs"},"value":"State"}],"paddingLeft":false,"paddingRight":false,"position":{"character":21,"line":47},"textEdits":[{"newText":": State","range":{"end":{"character":21,"line":47},"start":{"character":21,"line":47}}}]},{"kind":1,"label":[{"value":": "},{"location":{"range":{"end":{"character":14,"line":396},"start":{"character":11,"line":396}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/vec/mod.rs"},"value":"Vec"},{"value":"<"},{"location":{"range":{"end":{"character":12,"line":178},"start":{"character":9,"line":178}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/borrow.rs"},"value":"Cow"},{"value":"<'a, str>>"}],"paddingLeft":false,"paddingRight":false,"position":{"character":21,"line":48},"textEdits":[{"newText":": Vec<Cow<'a, str>>","range":{"end":{"character":21,"line":48},"start":{"character":21,"line":48}}}]},{"kind":1,"label":[{"value":": "},{"location":{"range":{"end":{"character":14,"line":396},"start":{"character":11,"line":396}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/vec/mod.rs"},"value":"Vec"},{"value":"<&str>"}],"paddingLeft":false,"paddingRight":false,"position":{"character":21,"line":49},"textEdits":[{"newText":": Vec<&str>","range":{"end":{"character":21,"line":49},"start":{"character":21,"line":49}}}]},{"kind":1,"label":[{"value":": "},{"location":{"range":{"end":{"character":17,"line":361},"start":{"character":11,"line":361}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs"},"value":"String"}],"paddingLeft":false,"paddingRight":false,"position":{"character":23,"line":50},"textEdits":[{"newText":": String","range":{"end":{"character":23,"line":50},"start":{"character":23,"line":50}}}]},{"kind":1,"label":": usize","paddingLeft":false,"paddingRight":false,"position":{"character":26,"line":52},"textEdits":[{"newText":": usize","range":{"end":{"character":26,"line":52},"start":{"character":26,"line":52}}}]},{"kind":1,"label":": usize","paddingLeft":false,"paddingRight":false,"position":{"character":31,"line":53},"textEdits":[{"newText":": usize","range":{"end":{"character":31,"line":53},"start":{"character":31,"line":53}}}]},{"kind":1,"label":": usize","paddingLeft":false,"paddingRight":false,"position":{"character":19,"line":54},"textEdits":[{"newText":": usize","range":{"end":{"character":19,"line":54},"start":{"character":19,"line":54}}}]},{"kind":1,"label":": usize","paddingLeft":false,"paddingRight":false,"position":{"character":14,"line":56}},{"kind":1,"label":": char","paddingLeft":false,"paddingRight":false,"position":{"character":17,"line":56}},{"kind":2,"label":[{"location":{"range":{"end":{"character":37,"line":1062},"start":{"character":31,"line":1062}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs"},"value":"string:"}],"paddingLeft":false,"paddingRight":true,"position":{"character":45,"line":69}}]
2024-11-23T22:59:07.436 helix_view::document [DEBUG] id 2 modified - last saved: 0, current: 1
2024-11-23T22:59:07.446 helix_view::document [DEBUG] id 2 modified - last saved: 0, current: 1
2024-11-23T22:59:07.571 helix_lsp::transport [INFO] rust-analyzer -> {"jsonrpc":"2.0","method":"completionItem/resolve","params":{"additionalTextEdits":[],"data":{"completion_item_index":222,"imports":[],"position":{"position":{"character":5,"line":20},"textDocument":{"uri":"file:///D:/source/helix/helix-core/src/shellwords.rs"}},"trigger_character":null,"version":11},"deprecated":false,"filterText":"ToString","kind":8,"label":"ToString","preselect":true,"sortText":"7fffffff","textEdit":{"insert":{"end":{"character":5,"line":20},"start":{"character":4,"line":20}},"newText":"ToString","replace":{"end":{"character":5,"line":20},"start":{"character":4,"line":20}}}},"id":37}
2024-11-23T22:59:07.577 helix_lsp::transport [INFO] rust-analyzer <- {"jsonrpc":"2.0","id":37,"result":{"label":"ToString","kind":8,"deprecated":false,"preselect":true,"sortText":"7fffffff","filterText":"ToString","textEdit":{"newText":"ToString","insert":{"start":{"line":20,"character":4},"end":{"line":20,"character":5}},"replace":{"start":{"line":20,"character":4},"end":{"line":20,"character":5}}},"additionalTextEdits":[]}}
2024-11-23T22:59:07.577 helix_lsp::transport [INFO] rust-analyzer <- {"additionalTextEdits":[],"deprecated":false,"filterText":"ToString","kind":8,"label":"ToString","preselect":true,"sortText":"7fffffff","textEdit":{"insert":{"end":{"character":5,"line":20},"start":{"character":4,"line":20}},"newText":"ToString","replace":{"end":{"character":5,"line":20},"start":{"character":4,"line":20}}}}
2024-11-23T22:59:07.583 helix_view::document [DEBUG] id 2 modified - last saved: 0, current: 1
2024-11-23T22:59:08.504 helix_vcs::diff::worker [INFO] Diff computation timed out, update of diffs might appear delayed
2024-11-23T22:59:08.510 helix_view::document [DEBUG] id 2 modified - last saved: 0, current: 1
2024-11-23T22:59:08.519 helix_term::application [DEBUG] received editor event: IdleTimer
2024-11-23T22:59:08.520 helix_lsp::transport [INFO] rust-analyzer -> {"jsonrpc":"2.0","method":"textDocument/inlayHint","params":{"range":{"end":{"character":0,"line":76},"start":{"character":0,"line":0}},"textDocument":{"uri":"file:///D:/source/helix/helix-core/src/shellwords.rs"}},"id":38}
2024-11-23T22:59:08.521 helix_lsp::transport [INFO] rust-analyzer <- {"jsonrpc":"2.0","id":38,"result":[{"position":{"line":4,"character":28},"label":": char","kind":1,"textEdits":[{"range":{"start":{"line":4,"character":28},"end":{"line":4,"character":28}},"newText":": char"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":7,"character":38},"label":[{"value":"init:","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/core/src/iter/traits/iterator.rs","range":{"start":{"line":2575,"character":28},"end":{"line":2575,"character":32}}}}],"kind":2,"paddingLeft":false,"paddingRight":true},{"position":{"line":7,"character":53},"label":[{"value":"f:","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/core/src/iter/traits/iterator.rs","range":{"start":{"line":2575,"character":41},"end":{"line":2575,"character":42}}}}],"kind":2,"paddingLeft":false,"paddingRight":true},{"position":{"line":7,"character":61},"label":[{"value":": "},{"value":"String","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs","range":{"start":{"line":361,"character":11},"end":{"line":361,"character":17}}}}],"kind":1,"textEdits":[{"range":{"start":{"line":7,"character":61},"end":{"line":7,"character":61}},"newText":": String"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":7,"character":64},"label":": char","kind":1,"textEdits":[{"range":{"start":{"line":7,"character":64},"end":{"line":7,"character":64}},"newText":": char"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":9,"character":25},"label":[{"value":"ch:","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs","range":{"start":{"line":1354,"character":27},"end":{"line":1354,"character":29}}}}],"kind":2,"paddingLeft":false,"paddingRight":true},{"position":{"line":11,"character":21},"label":[{"value":"ch:","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs","range":{"start":{"line":1354,"character":27},"end":{"line":1354,"character":29}}}}],"kind":2,"paddingLeft":false,"paddingRight":true},{"position":{"line":168,"character":1},"label":"impl From for Shellwords<'a>","paddingLeft":true,"paddingRight":false},{"position":{"line":167,"character":5},"label":[{"value":"fn from","location":{"uri":"file:///d:/source/helix/helix-core/src/shellwords.rs","range":{"start":{"line":44,"character":7},"end":{"line":44,"character":11}}}}],"paddingLeft":true,"paddingRight":false},{"position":{"line":47,"character":21},"label":[{"value":": "},{"value":"State","location":{"uri":"file:///d:/source/helix/helix-core/src/shellwords.rs","range":{"start":{"line":23,"character":5},"end":{"line":23,"character":10}}}}],"kind":1,"textEdits":[{"range":{"start":{"line":47,"character":21},"end":{"line":47,"character":21}},"newText":": State"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":48,"character":21},"label":[{"value":": "},{"value":"Vec","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/vec/mod.rs","range":{"start":{"line":396,"character":11},"end":{"line":396,"character":14}}}},{"value":"<"},{"value":"Cow","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/borrow.rs","range":{"start":{"line":178,"character":9},"end":{"line":178,"character":12}}}},{"value":"<'a, str>>"}],"kind":1,"textEdits":[{"range":{"start":{"line":48,"character":21},"end":{"line":48,"character":21}},"newText":": Vec<Cow<'a, str>>"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":49,"character":21},"label":[{"value":": "},{"value":"Vec","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/vec/mod.rs","range":{"start":{"line":396,"character":11},"end":{"line":396,"character":14}}}},{"value":"<&str>"}],"kind":1,"textEdits":[{"range":{"start":{"line":49,"character":21},"end":{"line":49,"character":21}},"newText":": Vec<&str>"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":50,"character":23},"label":[{"value":": "},{"value":"String","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs","range":{"start":{"line":361,"character":11},"end":{"line":361,"character":17}}}}],"kind":1,"textEdits":[{"range":{"start":{"line":50,"character":23},"end":{"line":50,"character":23}},"newText":": String"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":52,"character":26},"label":": usize","kind":1,"textEdits":[{"range":{"start":{"line":52,"character":26},"end":{"line":52,"character":26}},"newText":": usize"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":53,"character":31},"label":": usize","kind":1,"textEdits":[{"range":{"start":{"line":53,"character":31},"end":{"line":53,"character":31}},"newText":": usize"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":54,"character":19},"label":": usize","kind":1,"textEdits":[{"range":{"start":{"line":54,"character":19},"end":{"line":54,"character":19}},"newText":": usize"}],"paddingLeft":false,"paddingRight":false},{"position":{"line":56,"character":14},"label":": usize","kind":1,"paddingLeft":false,"paddingRight":false},{"position":{"line":56,"character":17},"label":": char","kind":1,"paddingLeft":false,"paddingRight":false},{"position":{"line":69,"character":45},"label":[{"value":"string:","location":{"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs","range":{"start":{"line":1062,"character":31},"end":{"line":1062,"character":37}}}}],"kind":2,"paddingLeft":false,"paddingRight":true}]}
2024-11-23T22:59:08.522 helix_lsp::transport [INFO] rust-analyzer <- [{"kind":1,"label":": char","paddingLeft":false,"paddingRight":false,"position":{"character":28,"line":4},"textEdits":[{"newText":": char","range":{"end":{"character":28,"line":4},"start":{"character":28,"line":4}}}]},{"kind":2,"label":[{"location":{"range":{"end":{"character":32,"line":2575},"start":{"character":28,"line":2575}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/core/src/iter/traits/iterator.rs"},"value":"init:"}],"paddingLeft":false,"paddingRight":true,"position":{"character":38,"line":7}},{"kind":2,"label":[{"location":{"range":{"end":{"character":42,"line":2575},"start":{"character":41,"line":2575}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/core/src/iter/traits/iterator.rs"},"value":"f:"}],"paddingLeft":false,"paddingRight":true,"position":{"character":53,"line":7}},{"kind":1,"label":[{"value":": "},{"location":{"range":{"end":{"character":17,"line":361},"start":{"character":11,"line":361}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs"},"value":"String"}],"paddingLeft":false,"paddingRight":false,"position":{"character":61,"line":7},"textEdits":[{"newText":": String","range":{"end":{"character":61,"line":7},"start":{"character":61,"line":7}}}]},{"kind":1,"label":": char","paddingLeft":false,"paddingRight":false,"position":{"character":64,"line":7},"textEdits":[{"newText":": char","range":{"end":{"character":64,"line":7},"start":{"character":64,"line":7}}}]},{"kind":2,"label":[{"location":{"range":{"end":{"character":29,"line":1354},"start":{"character":27,"line":1354}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs"},"value":"ch:"}],"paddingLeft":false,"paddingRight":true,"position":{"character":25,"line":9}},{"kind":2,"label":[{"location":{"range":{"end":{"character":29,"line":1354},"start":{"character":27,"line":1354}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs"},"value":"ch:"}],"paddingLeft":false,"paddingRight":true,"position":{"character":21,"line":11}},{"label":"impl From for Shellwords<'a>","paddingLeft":true,"paddingRight":false,"position":{"character":1,"line":168}},{"label":[{"location":{"range":{"end":{"character":11,"line":44},"start":{"character":7,"line":44}},"uri":"file:///d:/source/helix/helix-core/src/shellwords.rs"},"value":"fn from"}],"paddingLeft":true,"paddingRight":false,"position":{"character":5,"line":167}},{"kind":1,"label":[{"value":": "},{"location":{"range":{"end":{"character":10,"line":23},"start":{"character":5,"line":23}},"uri":"file:///d:/source/helix/helix-core/src/shellwords.rs"},"value":"State"}],"paddingLeft":false,"paddingRight":false,"position":{"character":21,"line":47},"textEdits":[{"newText":": State","range":{"end":{"character":21,"line":47},"start":{"character":21,"line":47}}}]},{"kind":1,"label":[{"value":": "},{"location":{"range":{"end":{"character":14,"line":396},"start":{"character":11,"line":396}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/vec/mod.rs"},"value":"Vec"},{"value":"<"},{"location":{"range":{"end":{"character":12,"line":178},"start":{"character":9,"line":178}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/borrow.rs"},"value":"Cow"},{"value":"<'a, str>>"}],"paddingLeft":false,"paddingRight":false,"position":{"character":21,"line":48},"textEdits":[{"newText":": Vec<Cow<'a, str>>","range":{"end":{"character":21,"line":48},"start":{"character":21,"line":48}}}]},{"kind":1,"label":[{"value":": "},{"location":{"range":{"end":{"character":14,"line":396},"start":{"character":11,"line":396}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/vec/mod.rs"},"value":"Vec"},{"value":"<&str>"}],"paddingLeft":false,"paddingRight":false,"position":{"character":21,"line":49},"textEdits":[{"newText":": Vec<&str>","range":{"end":{"character":21,"line":49},"start":{"character":21,"line":49}}}]},{"kind":1,"label":[{"value":": "},{"location":{"range":{"end":{"character":17,"line":361},"start":{"character":11,"line":361}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs"},"value":"String"}],"paddingLeft":false,"paddingRight":false,"position":{"character":23,"line":50},"textEdits":[{"newText":": String","range":{"end":{"character":23,"line":50},"start":{"character":23,"line":50}}}]},{"kind":1,"label":": usize","paddingLeft":false,"paddingRight":false,"position":{"character":26,"line":52},"textEdits":[{"newText":": usize","range":{"end":{"character":26,"line":52},"start":{"character":26,"line":52}}}]},{"kind":1,"label":": usize","paddingLeft":false,"paddingRight":false,"position":{"character":31,"line":53},"textEdits":[{"newText":": usize","range":{"end":{"character":31,"line":53},"start":{"character":31,"line":53}}}]},{"kind":1,"label":": usize","paddingLeft":false,"paddingRight":false,"position":{"character":19,"line":54},"textEdits":[{"newText":": usize","range":{"end":{"character":19,"line":54},"start":{"character":19,"line":54}}}]},{"kind":1,"label":": usize","paddingLeft":false,"paddingRight":false,"position":{"character":14,"line":56}},{"kind":1,"label":": char","paddingLeft":false,"paddingRight":false,"position":{"character":17,"line":56}},{"kind":2,"label":[{"location":{"range":{"end":{"character":37,"line":1062},"start":{"character":31,"line":1062}},"uri":"file:///c:/Users/Ryan/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/src/rust/library/alloc/src/string.rs"},"value":"string:"}],"paddingLeft":false,"paddingRight":true,"position":{"character":45,"line":69}}]
2024-11-23T22:59:08.525 helix_view::document [DEBUG] id 2 modified - last saved: 0, current: 1
2024-11-23T22:59:08.534 helix_view::document [DEBUG] id 2 modified - last saved: 0, current: 1
2024-11-23T22:59:08.662 helix_lsp::transport [INFO] rust-analyzer -> {"jsonrpc":"2.0","method":"completionItem/resolve","params":{"additionalTextEdits":[],"data":{"completion_item_index":0,"imports":[{"full_import_path":"bitflags::parser::to_writer_truncate","imported_name":"to_writer_truncate"}],"position":{"position":{"character":5,"line":20},"textDocument":{"uri":"file:///D:/source/helix/helix-core/src/shellwords.rs"}},"trigger_character":null,"version":11},"deprecated":false,"filterText":"to_writer_truncate","insertTextFormat":2,"kind":3,"label":"to_writer_truncate(…) (use bitflags::parser::to_writer_truncate)","sortText":"80000000","textEdit":{"insert":{"end":{"character":5,"line":20},"start":{"character":4,"line":20}},"newText":"to_writer_truncate(${1:flags}, ${2:writer})$0","replace":{"end":{"character":5,"line":20},"start":{"character":4,"line":20}}}},"id":39}
2024-11-23T22:59:08.668 helix_lsp::transport [INFO] rust-analyzer <- {"jsonrpc":"2.0","id":39,"result":{"label":"to_writer(…) (use bitflags::parser::to_writer)","kind":3,"detail":"fn(&B, impl Write) -> Result<(), Error>","documentation":{"kind":"markdown","value":"\nWrite a flags value as text.\n\nAny bits that aren't part of a contained flag will be formatted as a hex number."},"deprecated":false,"sortText":"80000000","filterText":"to_writer","insertTextFormat":2,"textEdit":{"newText":"to_writer(${1:flags}, ${2:writer})$0","insert":{"start":{"line":20,"character":4},"end":{"line":20,"character":5}},"replace":{"start":{"line":20,"character":4},"end":{"line":20,"character":6}}},"additionalTextEdits":[{"range":{"start":{"line":0,"character":21},"end":{"line":0,"character":21}},"newText":"\r\n\r\nuse bitflags::parser::to_writer_truncate;"}],"data":{"position":{"textDocument":{"uri":"file:///D:/source/helix/helix-core/src/shellwords.rs"},"position":{"line":20,"character":5}},"imports":[{"full_import_path":"bitflags::parser::to_writer","imported_name":"to_writer"}],"version":12,"trigger_character":null,"completion_item_index":0}}}
2024-11-23T22:59:08.669 helix_lsp::transport [INFO] rust-analyzer <- {"additionalTextEdits":[{"newText":"\r\n\r\nuse bitflags::parser::to_writer_truncate;","range":{"end":{"character":21,"line":0},"start":{"character":21,"line":0}}}],"data":{"completion_item_index":0,"imports":[{"full_import_path":"bitflags::parser::to_writer","imported_name":"to_writer"}],"position":{"position":{"character":5,"line":20},"textDocument":{"uri":"file:///D:/source/helix/helix-core/src/shellwords.rs"}},"trigger_character":null,"version":12},"deprecated":false,"detail":"fn(&B, impl Write) -> Result<(), Error>","documentation":{"kind":"markdown","value":"\nWrite a flags value as text.\n\nAny bits that aren't part of a contained flag will be formatted as a hex number."},"filterText":"to_writer","insertTextFormat":2,"kind":3,"label":"to_writer(…) (use bitflags::parser::to_writer)","sortText":"80000000","textEdit":{"insert":{"end":{"character":5,"line":20},"start":{"character":4,"line":20}},"newText":"to_writer(${1:flags}, ${2:writer})$0","replace":{"end":{"character":6,"line":20},"start":{"character":4,"line":20}}}}

Platform

Windows

Terminal Emulator

wezterm 20241112-222331-ed7ec94c

Installation Method

source

Helix Version

helix 24.7 (cbbeca6)

@RoloEdits RoloEdits added the C-bug Category: This is a bug label Nov 24, 2024
@RoloEdits RoloEdits changed the title Completiong items change when cycling Completion items change when cycling Nov 24, 2024
@RoloEdits
Copy link
Contributor Author

RoloEdits commented Nov 24, 2024

Huh, I don't know what is going on. I am experiencing the same behavior on older, known good commits now. Even downloaded the GitHub release binary and same thing. It was just fine earlier today and I haven't updated any of my setup in the meantime.

I can only continue to debug but if anyone has seen this behavior before please tell.

@RoloEdits
Copy link
Contributor Author

closing as this is some kind of setup issue I have

@jonahlund
Copy link
Contributor

jonahlund commented Nov 24, 2024

I also have this issue when building from source, which didn't happen previously. I think it's worth reopening the issue.

@RoloEdits RoloEdits reopened this Nov 24, 2024
@stormshield-guillaumed
Copy link

It is probably related to this issue rust-lang/rust-analyzer#18536 as rust-analyzer seems to have changed its behaviour on recent nightly to be more compliant to the LSP standard.

@workingjubilee
Copy link

According to @tgross35 in rust-lang/rust-analyzer#18547 rust-analyzer's interactions with helix in producing completions seems buggy. Yes, initially this was thought to be a rust-analyzer issue.

According to @flodiebold in rust-lang/rust-analyzer#18503 (comment) this may be a Helix issue:

This looks like what is arguably a client issue to me. Neovim and Helix seem to edit the text document when selecting completions and afterwards try to resolve the previous completions; at least that's what I suspect. The spec doesn't outright say this is forbidden, but I don't think it makes sense for completion items to still be valid after modifying the document.

Still, reverting the PR on stable might be a good idea.

To copy the repro steps from tgross35's issue:

recording of the actions in the helix editor

Since about the past week I have been dealing with an issue where autocomplete suggestions change when I highlight them. This video explains it better:

The video shows the following:

  • I type let mut px = PCt

  • Arrow down to the suggested and expected PCtx

  • Once the suggestion is highlighted in the dropdown, it replaces my PCt with PCtx which is expected. However, it deletes the space between = and PCt - that is weird.

  • I hit escape to cancel, which deletes PCt*

  • I start typing PCt again. RA again suggests PCtx

  • I arrow down and highlight PCtx in the dropdown. RA replaces it correctly this time

  • However, after about a half second, the suggested PCtx in the dropdown has changed to Either. This is completely random and makes no sense in the context (though what it suggests does seem to be consistent)

  • I hit escape to cancel. For some reason, it replaces PCtx with Either

My only RA config is pretty minimal:

[language-server.rust-analyzer.config]
diagnostics.disabled = [ "inactive-code", "unlinked-file" ]

I am assuming this came from an RA update since it started somewhat recently (past week or two) and Helix hasn't had an update in a few months, but I haven't yet had a chance to see if it still happens with older versions. This problem happens pretty consistently across multiple repos.

Edit: this happens with other kinds of autocomplete suggestions too, it is doing things like changing some_func to panic!().

@pascalkuthe
Copy link
Member

the issues that helix and nvim have are entirely orthogonal but manifest in the same way.

Nvim modifies the document while previewing completions. Helix intentionally uses virtual transactions that are not propagated to the LS when previewing a completion. However, helix does not support incomplete completion requests so we only requst completions once and as the user continues to type the document does ofcourse change.

What RA does is probably ok when using incomplete completion requests (we just don't do that yet) but the assumption that the document that a completion is resolved for is identical to the one a completion was requested for is probably not generallly valid for LSP as it's impossible to fullfill for servers without incomplete completion requests.

I had a branch for incomplete completion requests at some point that I will try to dust off at somepoint (but not sure I will manage before christmas) so the RA case will be addressed eventually but I am not sure this is really generally spec compliant

@Rudxain
Copy link
Contributor

Rudxain commented Nov 27, 2024

Is this related to microsoft/TypeScript#60606 ?

@gustafla
Copy link
Contributor

gustafla commented Dec 2, 2024

Sorry, I'm not adding anything valuable to this issue with this comment, but it really says something about how much I've grown to like helix, when this bug prevents me from using it effectively and I find that having to use vim/zed as a workaround is so jarring.

@jhscheer
Copy link
Contributor

jhscheer commented Dec 2, 2024

@gustafla Imho the workaround should not be to use another editor but an earlier version of rust-analyzer, e.g. try a stable version from Oct. or early Nov.
I tried Commit: [30e71b6] Release: [2024-11-11] and autocomplete works fine again.

@pascalkuthe
Copy link
Member

Rust-Analyzer blacklisted helix from this specific feature so RA and helix work together for now.

I do have incomplete completion requests almost working:

rust-lang/rust-analyzer#18547 (comment)

but I don't think what RA is doing here is really spec compliant and after some prodding I was able to reproduce the same issue in vscode. It only works there in most because the request handler is usually fast-enough (aka relying on a race condition)

@pascalkuthe pascalkuthe linked a pull request Dec 8, 2024 that will close this issue
hieronymusma added a commit to hieronymusma/yaros that referenced this issue Dec 10, 2024
The newer versions have a faulty rust-analyzer which does not work well
with the Helix editor. The auto completion sometimes changes while
cycling through them.

We need to wait until this is fixed either here
helix-editor/helix#12119
or here
rust-lang/rust-analyzer#18547
hieronymusma added a commit to hieronymusma/yaros that referenced this issue Dec 10, 2024
The newer versions have a faulty rust-analyzer which does not work well
with the Helix editor. The auto completion sometimes changes while
cycling through them.

We need to wait until this is fixed either here
helix-editor/helix#12119
or here
rust-lang/rust-analyzer#18547
@lnicola
Copy link
Contributor

lnicola commented Dec 11, 2024

This was fixed in rust-lang/rust-analyzer#18653.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-language-server Area: Language server client C-bug Category: This is a bug
Projects
None yet
Development

Successfully merging a pull request may close this issue.