A Neovim plugin enabling you to solve LeetCode problems.
Clone โพ
| 13 B | |
| 220 B | |
| 174 B | |
| 1.0 KB | |
| 5.9 KB |
๐จ leetcode.nvim is currently in the alpha stage of development ๐จ
leetcode.nvim
๐ฅ Solve LeetCode problems within Neovim ๐ฅ
https://github.com/kawre/leetcode.nvim/assets/69250723/309088c9-4ff7-4dff-ab61-ab3f09b43740
โจ Features
-
๐ an intuitive dashboard for effortless navigation within leetcode.nvim
-
๐ question description formatting for a better readability
-
๐ support for daily and random questions
-
๐พ caching for optimized performance
๐ฌ Requirements
-
Neovim >= 0.9.0
-
nvim-treesitter (optional, but highly recommended) used for formatting the question description. Make sure to install the parser for
html. -
nvim-notify (optional)
-
Nerd Font & nvim-web-devicons (optional)
๐ฆ Installation
{
"kawre/leetcode.nvim",
build = ":TSUpdate html",
dependencies = {
"nvim-treesitter/nvim-treesitter",
"nvim-telescope/telescope.nvim",
"nvim-lua/plenary.nvim", -- required by telescope
"MunifTanjim/nui.nvim",
-- optional
"rcarriga/nvim-notify",
"nvim-tree/nvim-web-devicons",
},
opts = {
-- configuration goes here
},
}
๐ ๏ธ Configuration
To see full configuration types see template.lua
โ๏ธ default configuration
{
---@type lc.domain
domain = "com", -- For now "com" is the only one supported
---@type string
arg = "leetcode.nvim",
---@type lc.lang
lang = "cpp",
---@type lc.sql
sql = "mysql",
---@type string
directory = vim.fn.stdpath("data") .. "/leetcode/",
---@type boolean
logging = true,
console = {
open_on_runcode = true, ---@type boolean
dir = "row", ---@type "col" | "row"
size = {
width = "90%", ---@type string | integer
height = "75%", ---@type string | integer
},
result = {
size = "60%", ---@type string | integer
},
testcase = {
virt_text = true, ---@type boolean
size = "40%", ---@type string | integer
},
},
description = {
position = "left", ---@type "top" | "right" | "bottom" | "left"
width = "40%", ---@type string | integer
},
}
arg
Argument for Neovim
---@type string
arg = "leetcode.nvim"
See usage for more info
lang
Language to start your session with
---@type lc.lang
lang = "cpp"
---@type lc.sql_lang
sql = "mysql"
domain
LeetCode domain.
---@type lc.domain
domain = "com" -- For now "com" is the only one supported
directory
Where to store leetcode.nvim data
---@type string
directory = vim.fn.stdpath("data") .. "/leetcode/"
logging
Whether to log leetcode.nvim status notifications
---@type boolean
logging = true
๐ Commands
| command | description |
|---|---|
Leet or Leet menu |
opens menu dashboard |
Leet console |
opens console pop-up for currently opened question |
Leet info |
opens a pop-up containing information about the currently opened question |
Leet tabs |
opens a picker with all currently opened question tabs |
Leet lang |
opens a picker to change the language of the current question |
Leet desc toggle |
toggle question description |
Leet run |
run currently opened question |
Leet submit |
submit currently opened question |
Leet list |
opens a problemlist picker |
Leet list
can take optional arguments
Leet list status=<status> topics=<topic1,topic2,...,topicN> difficulty=<difficulty>
๐ Usage
This plugin is meant to be used within a fresh Neovim instance.
Meaning that to launch leetcode.nvim you have to pass
arg as the first and only Neovim argument
nvim leetcode.nvim
Sign In
It is required to be signed-in to use leetcode.nvim
https://github.com/kawre/leetcode.nvim/assets/69250723/b7be8b95-5e2c-4153-8845-4ad3abeda5c3
๐ด Recipes
lazy loading
- proper lazy loading with lazy.nvim
local leet_arg = "leetcode.nvim"
return {
"kawre/leetcode.nvim",
lazy = leet_arg ~= vim.fn.argv()[1],
opts = {
arg = leet_arg,
},
}
โ Todo
- [ ] CN version
- [ ] SQL support
- [ ] Statistics menu page
- [ ] Docs
- [x] Hints pop-up