A Neovim plugin enabling you to solve LeetCode problems.
| 1 | ---@diagnostic disable: invisible, duplicate-set-field |
| 2 | |
| 3 | local leetcode = require("leetcode") |
| 4 | local config = require("leetcode.config") |
| 5 | |
| 6 | local is_standalone = true |
| 7 | local prev_cwd = nil |
| 8 | |
| 9 | ---@param on_vimenter boolean |
| 10 | leetcode.start = function(on_vimenter) |
| 11 | local skip, standalone = leetcode.should_skip(on_vimenter) |
| 12 | if skip then |
| 13 | return false |
| 14 | end |
| 15 | |
| 16 | config.setup() |
| 17 | |
| 18 | leetcode.setup_cmds() |
| 19 | |
| 20 | local theme = require("leetcode.theme") |
| 21 | theme.setup() |
| 22 | |
| 23 | if not on_vimenter then |
| 24 | if not standalone then |
| 25 | prev_cwd = vim.fn.getcwd() |
| 26 | vim.cmd.tabe() |
| 27 | else |
| 28 | vim.cmd.enew() |
| 29 | end |
| 30 | |
| 31 | is_standalone = standalone ---@diagnostic disable-line: cast-local-type |
| 32 | end |
| 33 | |
| 34 | vim.api.nvim_set_current_dir(config.storage.home:absolute()) |
| 35 | |
| 36 | local Menu = require("leetcode-ui.renderer.menu") |
| 37 | Menu():mount() |
| 38 | |
| 39 | local utils = require("leetcode.utils") |
| 40 | utils.exec_hooks("enter") |
| 41 | |
| 42 | return true |
| 43 | end |
| 44 | |
| 45 | leetcode.stop = vim.schedule_wrap(function() |
| 46 | if is_standalone then |
| 47 | return vim.cmd("qa!") |
| 48 | end |
| 49 | |
| 50 | _Lc_state.menu:unmount() |
| 51 | |
| 52 | vim.api.nvim_create_user_command("Leet", require("leetcode.command").start_with_cmd, { |
| 53 | bar = true, |
| 54 | bang = true, |
| 55 | desc = "Open leetcode.nvim", |
| 56 | }) |
| 57 | |
| 58 | local utils = require("leetcode.utils") |
| 59 | utils.exec_hooks("leave") |
| 60 | |
| 61 | if prev_cwd then |
| 62 | vim.api.nvim_set_current_dir(prev_cwd) |
| 63 | prev_cwd = nil |
| 64 | end |
| 65 | end) |