diff --git a/bench.esy.lock/index.json b/bench.esy.lock/index.json index 35e6783ef1..aa3c540db2 100644 --- a/bench.esy.lock/index.json +++ b/bench.esy.lock/index.json @@ -1,5 +1,5 @@ { - "checksum": "15c9f6cfa320083ff95d8f68805ddc3b", + "checksum": "af791fb3c1541cc903720a015127e59a", "root": "Oni2@link-dev:./package.json", "node": { "yarn-pkg-config@github:esy-ocaml/yarn-pkg-config#db3a0b63883606dd57c54a7158d560d6cba8cd79@d41d8cd9": { @@ -472,14 +472,14 @@ "dependencies": [], "devDependencies": [] }, - "libvim@8.10869.50@d41d8cd9": { - "id": "libvim@8.10869.50@d41d8cd9", + "libvim@8.10869.51@d41d8cd9": { + "id": "libvim@8.10869.51@d41d8cd9", "name": "libvim", - "version": "8.10869.50", + "version": "8.10869.51", "source": { "type": "install", "source": [ - "archive:https://registry.npmjs.org/libvim/-/libvim-8.10869.50.tgz#sha1:f0a641b8cf868217656a86eae130b6c901e75ae9" + "archive:https://registry.npmjs.org/libvim/-/libvim-8.10869.51.tgz#sha1:ad9bc8926cc654a74dd5eac0d1886f052b44c302" ] }, "overrides": [], @@ -1077,7 +1077,7 @@ "reasonFuzz@github:CrossR/reasonFuzz#1ad6f5d@d41d8cd9", "reason-tree-sitter@1.0.1001@d41d8cd9", "reason-native-crash-utils@github:onivim/reason-native-crash-utils#38c8f00@d41d8cd9", - "ocaml@4.9.1000@d41d8cd9", "libvim@8.10869.50@d41d8cd9", + "ocaml@4.9.1000@d41d8cd9", "libvim@8.10869.51@d41d8cd9", "isolinear@github:revery-ui/isolinear#8cad3b0@d41d8cd9", "esy-skia@github:revery-ui/esy-skia#d60e5fe@d41d8cd9", "esy-sdl2@2.0.10008@d41d8cd9", diff --git a/esy.lock/index.json b/esy.lock/index.json index ca4e9ffa3b..e7c105db92 100644 --- a/esy.lock/index.json +++ b/esy.lock/index.json @@ -1,5 +1,5 @@ { - "checksum": "15c9f6cfa320083ff95d8f68805ddc3b", + "checksum": "af791fb3c1541cc903720a015127e59a", "root": "Oni2@link-dev:./package.json", "node": { "yarn-pkg-config@github:esy-ocaml/yarn-pkg-config#db3a0b63883606dd57c54a7158d560d6cba8cd79@d41d8cd9": { @@ -472,14 +472,14 @@ "dependencies": [], "devDependencies": [] }, - "libvim@8.10869.50@d41d8cd9": { - "id": "libvim@8.10869.50@d41d8cd9", + "libvim@8.10869.51@d41d8cd9": { + "id": "libvim@8.10869.51@d41d8cd9", "name": "libvim", - "version": "8.10869.50", + "version": "8.10869.51", "source": { "type": "install", "source": [ - "archive:https://registry.npmjs.org/libvim/-/libvim-8.10869.50.tgz#sha1:f0a641b8cf868217656a86eae130b6c901e75ae9" + "archive:https://registry.npmjs.org/libvim/-/libvim-8.10869.51.tgz#sha1:ad9bc8926cc654a74dd5eac0d1886f052b44c302" ] }, "overrides": [], @@ -1076,7 +1076,7 @@ "reasonFuzz@github:CrossR/reasonFuzz#1ad6f5d@d41d8cd9", "reason-tree-sitter@1.0.1001@d41d8cd9", "reason-native-crash-utils@github:onivim/reason-native-crash-utils#38c8f00@d41d8cd9", - "ocaml@4.9.1000@d41d8cd9", "libvim@8.10869.50@d41d8cd9", + "ocaml@4.9.1000@d41d8cd9", "libvim@8.10869.51@d41d8cd9", "isolinear@github:revery-ui/isolinear#8cad3b0@d41d8cd9", "esy-skia@github:revery-ui/esy-skia#d60e5fe@d41d8cd9", "esy-sdl2@2.0.10008@d41d8cd9", diff --git a/integrationtest.esy.lock/index.json b/integrationtest.esy.lock/index.json index e0a0079f8e..547e3d2ac4 100644 --- a/integrationtest.esy.lock/index.json +++ b/integrationtest.esy.lock/index.json @@ -1,5 +1,5 @@ { - "checksum": "15c9f6cfa320083ff95d8f68805ddc3b", + "checksum": "af791fb3c1541cc903720a015127e59a", "root": "Oni2@link-dev:./package.json", "node": { "yarn-pkg-config@github:esy-ocaml/yarn-pkg-config#db3a0b63883606dd57c54a7158d560d6cba8cd79@d41d8cd9": { @@ -472,14 +472,14 @@ "dependencies": [], "devDependencies": [] }, - "libvim@8.10869.50@d41d8cd9": { - "id": "libvim@8.10869.50@d41d8cd9", + "libvim@8.10869.51@d41d8cd9": { + "id": "libvim@8.10869.51@d41d8cd9", "name": "libvim", - "version": "8.10869.50", + "version": "8.10869.51", "source": { "type": "install", "source": [ - "archive:https://registry.npmjs.org/libvim/-/libvim-8.10869.50.tgz#sha1:f0a641b8cf868217656a86eae130b6c901e75ae9" + "archive:https://registry.npmjs.org/libvim/-/libvim-8.10869.51.tgz#sha1:ad9bc8926cc654a74dd5eac0d1886f052b44c302" ] }, "overrides": [], @@ -1076,7 +1076,7 @@ "reasonFuzz@github:CrossR/reasonFuzz#1ad6f5d@d41d8cd9", "reason-tree-sitter@1.0.1001@d41d8cd9", "reason-native-crash-utils@github:onivim/reason-native-crash-utils#38c8f00@d41d8cd9", - "ocaml@4.9.1000@d41d8cd9", "libvim@8.10869.50@d41d8cd9", + "ocaml@4.9.1000@d41d8cd9", "libvim@8.10869.51@d41d8cd9", "isolinear@github:revery-ui/isolinear#8cad3b0@d41d8cd9", "esy-skia@github:revery-ui/esy-skia#d60e5fe@d41d8cd9", "esy-sdl2@2.0.10008@d41d8cd9", diff --git a/package.json b/package.json index 45fe6c05f0..8fbdef8ad8 100644 --- a/package.json +++ b/package.json @@ -236,7 +236,7 @@ "esy-sdl2": "*", "esy-skia": "*", "isolinear": "^3.0.0", - "libvim": "8.10869.50", + "libvim": "8.10869.51", "ocaml": "~4.7.0", "reason-native-crash-utils": "onivim/reason-native-crash-utils#38c8f00", "reason-tree-sitter": "^1.0.1001", diff --git a/src/Core/Utility/ListEx.re b/src/Core/Utility/ListEx.re index ebe403f189..908ae95cc2 100644 --- a/src/Core/Utility/ListEx.re +++ b/src/Core/Utility/ListEx.re @@ -77,3 +77,75 @@ let findIndex = (predicate, list) => { | [_, ...tail] => loop(i + 1, tail); loop(0, list); }; + +/** + * removeAt + */ +let removeAt = (index, list) => { + let left = Base.List.take(list, index); + let right = Base.List.drop(list, index + 1); + left @ right; +}; + +let%test_module "removeAt" = + (module + { + let%test "0" = removeAt(0, [1, 2, 3]) == [2, 3]; + let%test "1" = removeAt(1, [1, 2, 3]) == [1, 3]; + let%test "2" = removeAt(2, [1, 2, 3]) == [1, 2]; + let%test "-10 (out of bounds)" = removeAt(-10, [1, 2, 3]) == [1, 2, 3]; + let%test "10 (out of bounds)" = removeAt(10, [1, 2, 3]) == [1, 2, 3]; + }); + +/** + * insertAt + */ +let insertAt = (index, element, list) => { + let (left, right) = Base.List.split_n(list, index); + left @ [element] @ right; +}; + +let%test_module "insertAt" = + (module + { + let%test "0" = insertAt(0, 42, [1, 2, 3]) == [42, 1, 2, 3]; + let%test "1" = insertAt(1, 42, [1, 2, 3]) == [1, 42, 2, 3]; + let%test "2" = insertAt(2, 42, [1, 2, 3]) == [1, 2, 42, 3]; + let%test "3" = insertAt(3, 42, [1, 2, 3]) == [1, 2, 3, 42]; + let%test "-10 (out of bounds)" = + insertAt(-10, 42, [1, 2, 3]) == [42, 1, 2, 3]; + let%test "10 (out of bounds)" = + insertAt(10, 42, [1, 2, 3]) == [1, 2, 3, 42]; + }); + +/** + * move + */ +let move = (~fromi, ~toi, list) => { + let element = List.nth(list, fromi); + list |> removeAt(fromi) |> insertAt(toi, element); +}; + +let%test_module "move" = + (module + { + let%test "0 -> 0" = move(~fromi=0, ~toi=0, [1, 2, 3]) == [1, 2, 3]; + let%test "0 -> 1" = move(~fromi=0, ~toi=1, [1, 2, 3]) == [2, 1, 3]; + let%test "0 -> 2" = move(~fromi=0, ~toi=2, [1, 2, 3]) == [2, 3, 1]; + let%test "1 -> 0" = move(~fromi=1, ~toi=0, [1, 2, 3]) == [2, 1, 3]; + let%test "1 -> 1" = move(~fromi=1, ~toi=1, [1, 2, 3]) == [1, 2, 3]; + let%test "1 -> 2" = move(~fromi=1, ~toi=2, [1, 2, 3]) == [1, 3, 2]; + let%test "2 -> 0" = move(~fromi=2, ~toi=0, [1, 2, 3]) == [3, 1, 2]; + let%test "2 -> 1" = move(~fromi=2, ~toi=1, [1, 2, 3]) == [1, 3, 2]; + let%test "2 -> 2" = move(~fromi=2, ~toi=2, [1, 2, 3]) == [1, 2, 3]; + let%test "-10 -> 1 (out of bounds)" = + switch (move(~fromi=-10, ~toi=1, [1, 2, 3])) { + | exception (Invalid_argument(_)) => true + | _ => false + }; + let%test "10 -> 1 (out of bounds)" = + switch (move(~fromi=10, ~toi=1, [1, 2, 3])) { + | exception (Failure(_)) => true + | _ => false + }; + }); diff --git a/src/Feature/Layout/Feature_Layout.rei b/src/Feature/Layout/Feature_Layout.rei index 2dc455f24c..5d548ebbaa 100644 --- a/src/Feature/Layout/Feature_Layout.rei +++ b/src/Feature/Layout/Feature_Layout.rei @@ -23,6 +23,16 @@ let openEditor: (~config: Config.resolver, Editor.t, model) => model; let closeBuffer: (~force: bool, Vim.Types.buffer, model) => option(model); let addLayoutTab: model => model; +let gotoLayoutTab: (int, model) => model; +let previousLayoutTab: (~count: int=?, model) => model; +let nextLayoutTab: (~count: int=?, model) => model; +let removeLayoutTab: (int, model) => option(model); +let removeLayoutTabRelative: (~delta: int, model) => option(model); +let removeActiveLayoutTab: model => option(model); +let removeOtherLayoutTabs: model => model; +let removeOtherLayoutTabsRelative: (~count: int, model) => model; +let moveActiveLayoutTabTo: (int, model) => model; +let moveActiveLayoutTabRelative: (int, model) => model; let map: (Editor.t => Editor.t, model) => model; diff --git a/src/Feature/Layout/Model.re b/src/Feature/Layout/Model.re index 8c6fd727cb..9476aee68d 100644 --- a/src/Feature/Layout/Model.re +++ b/src/Feature/Layout/Model.re @@ -278,6 +278,28 @@ let removeLayoutTab = (index, model) => { }; }; +let removeLayoutTabRelative = (~delta, model) => + removeLayoutTab(model.activeLayoutIndex + delta, model); + +let removeActiveLayoutTab = model => + removeLayoutTab(model.activeLayoutIndex, model); + +let removeOtherLayoutTabs = model => { + layouts: [activeLayout(model)], + activeLayoutIndex: 0, +}; + +let removeOtherLayoutTabsRelative = (~count, model) => { + let (start, stop) = + count < 0 + ? (model.activeLayoutIndex + count, model.activeLayoutIndex - 1) + : (model.activeLayoutIndex + 1, model.activeLayoutIndex + count); + { + layouts: ListEx.sublist(start, stop, model.layouts), + activeLayoutIndex: 0, + }; +}; + let removeEditor = (editorId, model) => { let removeFromLayout = layout => { let groups = @@ -367,6 +389,32 @@ let addLayoutTab = model => { }; }; +let gotoLayoutTab = (index, model) => { + ...model, + activeLayoutIndex: + IntEx.clamp(index, ~lo=0, ~hi=List.length(model.layouts) - 1), +}; + +let previousLayoutTab = (~count=1, model) => + gotoLayoutTab(model.activeLayoutIndex - count, model); + +let nextLayoutTab = (~count=1, model) => + gotoLayoutTab(model.activeLayoutIndex + count, model); + +let moveActiveLayoutTabTo = (index, model) => { + let newLayouts = + ListEx.move(~fromi=model.activeLayoutIndex, ~toi=index, model.layouts); + + { + layouts: newLayouts, + activeLayoutIndex: + IntEx.clamp(index, ~lo=0, ~hi=List.length(newLayouts) - 1), + }; +}; + +let moveActiveLayoutTabRelative = (delta, model) => + moveActiveLayoutTabTo(model.activeLayoutIndex + delta, model); + let map = (f, model) => { ...model, layouts: diff --git a/src/Model/Actions.re b/src/Model/Actions.re index f87523b4f3..ec095bd4dd 100644 --- a/src/Model/Actions.re +++ b/src/Model/Actions.re @@ -223,6 +223,7 @@ type t = decorations: list(Decoration.t), }) | Vim(Feature_Vim.msg) + | TabPage(Vim.TabPage.effect) | Noop and command = { commandCategory: option(string), diff --git a/src/Store/VimStoreConnector.re b/src/Store/VimStoreConnector.re index b6d29c95da..de6f846c34 100644 --- a/src/Store/VimStoreConnector.re +++ b/src/Store/VimStoreConnector.re @@ -89,6 +89,7 @@ let start = let handleGoto = gotoType => { switch (gotoType) { | Vim.Goto.Hover => dispatch(Actions.Hover(Feature_Hover.Command(Show))) + | Vim.Goto.Definition | Vim.Goto.Declaration => Log.debug("Goto definition requested"); @@ -121,6 +122,7 @@ let start = Vim.onEffect( fun | Goto(gotoType) => handleGoto(gotoType) + | TabPage(msg) => dispatch(TabPage(msg)) | Format(Buffer(_)) => dispatch( Actions.Formatting(Feature_Formatting.Command(FormatDocument)), @@ -737,6 +739,7 @@ let start = state, synchronizeViml(configuration), ) + | Command("editor.action.clipboardPasteAction") => ( state, pasteIntoEditorAction, @@ -751,6 +754,7 @@ let start = | Command("vim.esc") => (state, escapeEffect) | Command("vim.tutor") => (state, openTutorEffect) | VimExecuteCommand(cmd) => (state, commandEffect(cmd)) + | ListFocusUp | ListFocusDown | ListFocus(_) => @@ -905,6 +909,7 @@ let start = (state, effect); | KeyboardInput(s) => (state, inputEffect(s)) + | CopyActiveFilepathToClipboard => ( state, copyActiveFilepathToClipboardEffect, @@ -964,6 +969,96 @@ let start = | _ => (state, Isolinear.Effect.none) } + | TabPage(Goto(index)) => ( + { + ...state, + layout: Feature_Layout.gotoLayoutTab(index - 1, state.layout), + }, + Isolinear.Effect.none, + ) + + | TabPage(GotoRelative(delta)) when delta < 0 => ( + { + ...state, + layout: + Feature_Layout.previousLayoutTab(~count=- delta, state.layout), + }, + Isolinear.Effect.none, + ) + + | TabPage(GotoRelative(delta)) => ( + { + ...state, + layout: Feature_Layout.nextLayoutTab(~count=delta, state.layout), + }, + Isolinear.Effect.none, + ) + + | TabPage(Move(index)) => ( + { + ...state, + layout: + Feature_Layout.moveActiveLayoutTabTo(index - 1, state.layout), + }, + Isolinear.Effect.none, + ) + + | TabPage(MoveRelative(delta)) => ( + { + ...state, + layout: + Feature_Layout.moveActiveLayoutTabRelative(delta, state.layout), + }, + Isolinear.Effect.none, + ) + + | TabPage(Close(0)) => + switch (Feature_Layout.removeActiveLayoutTab(state.layout)) { + | Some(layout) => ({...state, layout}, Isolinear.Effect.none) + | None => (state, Isolinear.Effect.none) + } + + | TabPage(Close(index)) => + switch (Feature_Layout.removeLayoutTab(index - 1, state.layout)) { + | Some(layout) => ({...state, layout}, Isolinear.Effect.none) + | None => (state, Isolinear.Effect.none) + } + + | TabPage(CloseRelative(delta)) => + switch (Feature_Layout.removeLayoutTabRelative(~delta, state.layout)) { + | Some(layout) => ({...state, layout}, Isolinear.Effect.none) + | None => (state, Isolinear.Effect.none) + } + + | TabPage(Only(0)) => ( + { + ...state, + layout: state.layout |> Feature_Layout.removeOtherLayoutTabs, + }, + Isolinear.Effect.none, + ) + + | TabPage(Only(index)) => ( + { + ...state, + layout: + state.layout + |> Feature_Layout.gotoLayoutTab(index - 1) + |> Feature_Layout.removeOtherLayoutTabs, + }, + Isolinear.Effect.none, + ) + + | TabPage(OnlyRelative(count)) => ( + { + ...state, + layout: + state.layout + |> Feature_Layout.removeOtherLayoutTabsRelative(~count), + }, + Isolinear.Effect.none, + ) + | _ => (state, Isolinear.Effect.none) }; }; diff --git a/src/reason-libvim/Effect.re b/src/reason-libvim/Effect.re index cef0bbd066..5bb73671c5 100644 --- a/src/reason-libvim/Effect.re +++ b/src/reason-libvim/Effect.re @@ -1,3 +1,4 @@ type t = | Goto(Goto.effect) + | TabPage(TabPage.effect) | Format(Format.effect); diff --git a/src/reason-libvim/TabPage.re b/src/reason-libvim/TabPage.re new file mode 100644 index 0000000000..4e7448c462 --- /dev/null +++ b/src/reason-libvim/TabPage.re @@ -0,0 +1,10 @@ +[@deriving show({with_path: false})] +type effect = + | Goto(int) + | GotoRelative(int) + | Move(int) + | MoveRelative(int) + | Close(int) + | CloseRelative(int) + | Only(int) + | OnlyRelative(int); diff --git a/src/reason-libvim/Vim.re b/src/reason-libvim/Vim.re index 691fe62ec4..3f3970ca92 100644 --- a/src/reason-libvim/Vim.re +++ b/src/reason-libvim/Vim.re @@ -17,6 +17,7 @@ module Effect = Effect; module Event = Event; module Format = Format; module Goto = Goto; +module TabPage = TabPage; module Mode = Mode; module Options = Options; module Search = Search; @@ -419,6 +420,10 @@ let _onGoto = (_line: int, _column: int, gotoType: Goto.effect) => { queue(() => Event.dispatch(Effect.Goto(gotoType), Listeners.effect)); }; +let _onTabPage = (msg: TabPage.effect) => { + queue(() => Event.dispatch(Effect.TabPage(msg), Listeners.effect)); +}; + let _onTerminal = terminalRequest => { queue(() => Event.dispatch(terminalRequest, Listeners.terminalRequested)); }; @@ -435,6 +440,7 @@ let init = () => { Callback.register("lv_onDirectoryChanged", _onDirectoryChanged); Callback.register("lv_onFormat", _onFormat); Callback.register("lv_onGoto", _onGoto); + Callback.register("lv_onTabPage", _onTabPage); Callback.register("lv_onIntro", _onIntro); Callback.register("lv_onMessage", _onMessage); Callback.register("lv_onQuit", _onQuit); diff --git a/src/reason-libvim/Vim.rei b/src/reason-libvim/Vim.rei index f29255a016..8f6a4e36cf 100644 --- a/src/reason-libvim/Vim.rei +++ b/src/reason-libvim/Vim.rei @@ -221,6 +221,19 @@ module Goto: { | Hover; }; +module TabPage: { + [@deriving show] + type effect = + | Goto(int) + | GotoRelative(int) + | Move(int) + | MoveRelative(int) + | Close(int) + | CloseRelative(int) + | Only(int) + | OnlyRelative(int); +}; + module Format: { type formatType = | Indentation @@ -244,6 +257,7 @@ module Format: { module Effect: { type t = | Goto(Goto.effect) + | TabPage(TabPage.effect) | Format(Format.effect); }; diff --git a/src/reason-libvim/bindings.c b/src/reason-libvim/bindings.c index fa8666db30..3ce31a8377 100644 --- a/src/reason-libvim/bindings.c +++ b/src/reason-libvim/bindings.c @@ -92,6 +92,62 @@ int onGoto(gotoRequest_T gotoInfo) { caml_callback3(*lv_onGoto, Val_int(line), Val_int(col), Val_int(target)); } +int onTabPage(tabPageRequest_T request) { + CAMLparam0(); + CAMLlocal1(msg); + static const value *tabPageCallback = NULL; + + if (tabPageCallback == NULL) { + tabPageCallback = caml_named_value("lv_onTabPage"); + } + + switch (request.kind) { + case GOTO: + if (request.relative == 0) { + msg = caml_alloc(1, 0); + Store_field(msg, 0, Val_int(request.arg)); + } else { + msg = caml_alloc(1, 1); + Store_field(msg, 0, Val_int(request.arg * request.relative)); + } + break; + + case MOVE: + if (request.relative == 0) { + msg = caml_alloc(1, 2); + Store_field(msg, 0, Val_int(request.arg)); + } else { + msg = caml_alloc(1, 3); + Store_field(msg, 0, Val_int(request.arg * request.relative)); + } + break; + + case CLOSE: + if (request.relative == 0) { + msg = caml_alloc(1, 4); + Store_field(msg, 0, Val_int(request.arg)); + } else { + msg = caml_alloc(1, 5); + Store_field(msg, 0, Val_int(request.arg * request.relative)); + } + break; + + case ONLY: + if (request.relative == 0) { + + msg = caml_alloc(1, 6); + Store_field(msg, 0, Val_int(request.arg)); + } else { + msg = caml_alloc(1, 7); + Store_field(msg, 0, Val_int(request.arg * request.relative)); + } + break; + } + + caml_callback(*tabPageCallback, msg); + CAMLreturn(1); +} + void onAutocommand(event_T event, buf_T *buf) { static const value *lv_onAutocmd = NULL; @@ -401,6 +457,7 @@ CAMLprim value libvim_vimInit(value unit) { vimSetDisplayVersionCallback(&onVersion); vimSetFormatCallback(&onFormat); vimSetGotoCallback(&onGoto); + vimSetTabPageCallback(&onTabPage); vimSetMessageCallback(&onMessage); vimSetQuitCallback(&onQuit); vimSetTerminalCallback(&onTerminal); diff --git a/src/reason-libvim/dune b/src/reason-libvim/dune index eff385e005..700dc4e7f0 100644 --- a/src/reason-libvim/dune +++ b/src/reason-libvim/dune @@ -5,7 +5,14 @@ (c_flags (:include c_flags.sexp)) (c_names bindings) (cxx_flags (:include cxx_flags.sexp)) - (libraries base editor-core-types timber zed_oni)) + (preprocess (pps ppx_deriving.show)) + (libraries + base + editor-core-types + timber + zed_oni + ppx_deriving.runtime +)) (rule (targets c_flags.sexp cxx_flags.sexp flags.sexp) diff --git a/test.esy.lock/index.json b/test.esy.lock/index.json index af9191cab5..75cffda8ba 100644 --- a/test.esy.lock/index.json +++ b/test.esy.lock/index.json @@ -1,5 +1,5 @@ { - "checksum": "bde1703e8d6e1691b9ff8d7b421ea409", + "checksum": "33657278a343994729c9aa4a31b5934b", "root": "Oni2@link-dev:./package.json", "node": { "yarn-pkg-config@github:esy-ocaml/yarn-pkg-config#db3a0b63883606dd57c54a7158d560d6cba8cd79@d41d8cd9": { @@ -472,14 +472,14 @@ "dependencies": [], "devDependencies": [] }, - "libvim@8.10869.50@d41d8cd9": { - "id": "libvim@8.10869.50@d41d8cd9", + "libvim@8.10869.51@d41d8cd9": { + "id": "libvim@8.10869.51@d41d8cd9", "name": "libvim", - "version": "8.10869.50", + "version": "8.10869.51", "source": { "type": "install", "source": [ - "archive:https://registry.npmjs.org/libvim/-/libvim-8.10869.50.tgz#sha1:f0a641b8cf868217656a86eae130b6c901e75ae9" + "archive:https://registry.npmjs.org/libvim/-/libvim-8.10869.51.tgz#sha1:ad9bc8926cc654a74dd5eac0d1886f052b44c302" ] }, "overrides": [], @@ -1076,7 +1076,7 @@ "reasonFuzz@github:CrossR/reasonFuzz#1ad6f5d@d41d8cd9", "reason-tree-sitter@1.0.1001@d41d8cd9", "reason-native-crash-utils@github:onivim/reason-native-crash-utils#38c8f00@d41d8cd9", - "ocaml@4.9.1000@d41d8cd9", "libvim@8.10869.50@d41d8cd9", + "ocaml@4.9.1000@d41d8cd9", "libvim@8.10869.51@d41d8cd9", "isolinear@github:revery-ui/isolinear#8cad3b0@d41d8cd9", "esy-skia@github:revery-ui/esy-skia#d60e5fe@d41d8cd9", "esy-sdl2@2.0.10008@d41d8cd9",