irongit

A Neovim plugin enabling you to solve LeetCode problems.

leetcode.nvim/README.md
250 lines5.6 KBMarkdown

๐Ÿšจ 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 = {
            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
LcMenu opens menu dashboard
LcList opens a problem list picker
LcConsole opens console pop-up for currently opened question
LcHints opens hints pop-up for currently opened question
LcTabs opens a picker with all currently opened question tabs
LcLanguage opens a picker to change the language of the current question
LcDescriptionToggle toggle question description
LcRun run currently opened question
LcSubmit submit currently opened question

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