irongit

A Neovim plugin enabling you to solve LeetCode problems.

101 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
        "nvim-tree/nvim-web-devicons",

        -- recommended
        -- "rcarriga/nvim-notify",
    },
    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_lang
    sql = "mysql",

    ---@type string
    directory = vim.fn.stdpath("data") .. "/leetcode/",

    ---@type boolean
    logging = true,

    console = {
        ---@type boolean
        open_on_runcode = false,

        size = {
            width = "75%", ---@type string | integer
            height = "75%", ---@type string | integer
        },
        dir = "row", ---@type "col" | "row"
    },

    description = {
        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

console

Console appearance

console = {
    ---@type boolean
    open_on_runcode = false,

    size = {
        width = "75%", ---@type string | integer
        height = "75%", ---@type string | integer
    },
    dir = "row", ---@type "col" | "row"
}

description

Question description appearance

description = {
    width = "40%", ---@type string | integer
}

๐Ÿ“‹ Commands

command description
LcMenu opens menu dashboard
LcConsole opens console for currently opened question
LcQuestionTabs opens a picker with all currently opened question tabs
LcLanguage opens a picker to select a language for the current session
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 lauch 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

Working with multiple questions

When you open a new question, leetcode.nvim creates a new tabpage containing all of the contents related to it. To switch between these tabs, use LcQuestionTabs command

https://github.com/kawre/leetcode.nvim/assets/69250723/64378b0f-c5ba-4378-b9ff-a95df13fbf36

โœ… Todo

  • CN version
  • SQL support
  • Statistics menu page
  • Docs
  • Hints pop-up

๐Ÿ™Œ Credits