diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 0000000..371051d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,77 @@ +name: Bug Report +description: Report a bug +title: "bug: " +labels: [bug] +body: + - type: checkboxes + attributes: + label: Prerequisites + options: + - label: I have searched [existing issues](https://github.com/barrettruth/fugitive-ts.nvim/issues) + required: true + - label: I have updated to the latest version + required: true + + - type: textarea + attributes: + label: "Neovim version" + description: "Output of `nvim --version`" + render: text + validations: + required: true + + - type: input + attributes: + label: "Operating system" + placeholder: "e.g. Arch Linux, macOS 15, Ubuntu 24.04" + validations: + required: true + + - type: textarea + attributes: + label: Description + description: What happened? What did you expect? + validations: + required: true + + - type: textarea + attributes: + label: Steps to reproduce + description: Minimal steps to trigger the bug + value: | + 1. + 2. + 3. + validations: + required: true + + - type: textarea + attributes: + label: "Health check" + description: "Output of `:checkhealth fugitive-ts`" + render: text + + - type: textarea + attributes: + label: Minimal reproduction + description: | + Save the script below as `repro.lua`, edit if needed, and run: + ``` + nvim -u repro.lua + ``` + Confirm the bug reproduces with this config before submitting. + render: lua + value: | + vim.env.LAZY_STDPATH = '.repro' + load(vim.fn.system('curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua'))() + require('lazy.nvim').setup({ + spec = { + 'tpope/vim-fugitive', + { + 'barrettruth/fugitive-ts.nvim', + opts = {}, + }, + }, + }) + validations: + required: true diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..017dbad --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,5 @@ +blank_issues_enabled: false +contact_links: + - name: Questions + url: https://github.com/barrettruth/fugitive-ts.nvim/discussions + about: Ask questions and discuss ideas diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 0000000..e85ddba --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,28 @@ +name: Feature Request +description: Suggest a feature +title: "feat: " +labels: [enhancement] +body: + - type: checkboxes + attributes: + label: Prerequisites + options: + - label: I have searched [existing issues](https://github.com/barrettruth/fugitive-ts.nvim/issues) + required: true + + - type: textarea + attributes: + label: Problem + description: What problem does this solve? + validations: + required: true + + - type: textarea + attributes: + label: Proposed solution + validations: + required: true + + - type: textarea + attributes: + label: Alternatives considered diff --git a/lua/fugitive-ts/highlight.lua b/lua/fugitive-ts/highlight.lua index 122bb6d..26b2548 100644 --- a/lua/fugitive-ts/highlight.lua +++ b/lua/fugitive-ts/highlight.lua @@ -1,21 +1,6 @@ local M = {} -local debug_enabled = false - ----@param enabled boolean -function M.set_debug(enabled) - debug_enabled = enabled -end - ----@param msg string ----@param ... any -local function dbg(msg, ...) - if not debug_enabled then - return - end - local formatted = string.format(msg, ...) - vim.notify('[fugitive-ts] ' .. formatted, vim.log.levels.DEBUG) -end +local dbg = require('fugitive-ts.log').dbg ---@param bufnr integer ---@param ns integer diff --git a/lua/fugitive-ts/init.lua b/lua/fugitive-ts/init.lua index f7f46c9..c5087d0 100644 --- a/lua/fugitive-ts/init.lua +++ b/lua/fugitive-ts/init.lua @@ -30,6 +30,7 @@ local M = {} local highlight = require('fugitive-ts.highlight') +local log = require('fugitive-ts.log') local parser = require('fugitive-ts.parser') local ns = vim.api.nvim_create_namespace('fugitive_ts') @@ -104,15 +105,7 @@ function M.is_fugitive_buffer(bufnr) return vim.api.nvim_buf_get_name(bufnr):match('^fugitive://') ~= nil end ----@param msg string ----@param ... any -local function dbg(msg, ...) - if not config.debug then - return - end - local formatted = string.format(msg, ...) - vim.notify('[fugitive-ts] ' .. formatted, vim.log.levels.DEBUG) -end +local dbg = log.dbg ---@param bufnr integer local function highlight_buffer(bufnr) @@ -338,9 +331,18 @@ function M.setup(opts) }) end + if opts.debounce_ms and opts.debounce_ms < 0 then + error('fugitive-ts: debounce_ms must be >= 0') + end + if opts.treesitter and opts.treesitter.max_lines and opts.treesitter.max_lines < 1 then + error('fugitive-ts: treesitter.max_lines must be >= 1') + end + if opts.vim and opts.vim.max_lines and opts.vim.max_lines < 1 then + error('fugitive-ts: vim.max_lines must be >= 1') + end + config = vim.tbl_deep_extend('force', default_config, opts) - parser.set_debug(config.debug) - highlight.set_debug(config.debug) + log.set_enabled(config.debug) compute_highlight_groups() diff --git a/lua/fugitive-ts/log.lua b/lua/fugitive-ts/log.lua new file mode 100644 index 0000000..be43978 --- /dev/null +++ b/lua/fugitive-ts/log.lua @@ -0,0 +1,19 @@ +local M = {} + +local enabled = false + +---@param val boolean +function M.set_enabled(val) + enabled = val +end + +---@param msg string +---@param ... any +function M.dbg(msg, ...) + if not enabled then + return + end + vim.notify('[fugitive-ts] ' .. string.format(msg, ...), vim.log.levels.DEBUG) +end + +return M diff --git a/lua/fugitive-ts/parser.lua b/lua/fugitive-ts/parser.lua index e5b720e..ab6daed 100644 --- a/lua/fugitive-ts/parser.lua +++ b/lua/fugitive-ts/parser.lua @@ -9,22 +9,7 @@ local M = {} -local debug_enabled = false - ----@param enabled boolean -function M.set_debug(enabled) - debug_enabled = enabled -end - ----@param msg string ----@param ... any -local function dbg(msg, ...) - if not debug_enabled then - return - end - local formatted = string.format(msg, ...) - vim.notify('[fugitive-ts] ' .. formatted, vim.log.levels.DEBUG) -end +local dbg = require('fugitive-ts.log').dbg ---@param filename string ---@return string? @@ -116,7 +101,13 @@ function M.parse_buffer(bufnr) local prefix = line:sub(1, 1) if prefix == ' ' or prefix == '+' or prefix == '-' then table.insert(hunk_lines, line) - elseif line == '' or line:match('^[MADRC%?!]%s+') or line:match('^%a') then + elseif + line == '' + or line:match('^[MADRC%?!]%s+') + or line:match('^diff ') + or line:match('^index ') + or line:match('^Binary ') + then flush_hunk() current_filename = nil current_ft = nil