irongit

A Neovim plugin enabling you to solve LeetCode problems.

173 commits
Clone โ–พ
HTTPS
SSH
CLI
README.md

๐Ÿšจ 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

  • ๐Ÿ“ˆ LeetCode profile statistics within Neovim (Soon)

  • ๐Ÿ”€ support for daily and random questions

  • ๐Ÿ’พ caching for optimized performance

๐Ÿ“ฌ Requirements

๐Ÿ“ฆ 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 = false, ---@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 hints opens hints pop-up for 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

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

๐Ÿ™Œ Credits