Compare commits

..

No commits in common. "2475bcd6b17eef5ca556e6d7c41ba9c9b2726431" and "01248ffcff12c0c04a771d5b7085f56bb2a7cfd4" have entirely different histories.

16 changed files with 197 additions and 232 deletions

View file

@ -7,7 +7,8 @@ body:
attributes:
label: Prerequisites
options:
- label: I have searched [existing
- label:
I have searched [existing
issues](https://github.com/barrettruth/http-codes.nvim/issues)
required: true
- label: I have updated to the latest version

View file

@ -7,7 +7,8 @@ body:
attributes:
label: Prerequisites
options:
- label: I have searched [existing
- label:
I have searched [existing
issues](https://github.com/barrettruth/http-codes.nvim/issues)
required: true

View file

@ -1,7 +1,7 @@
{
"runtime.version": "Lua 5.1",
"runtime.path": ["lua/?.lua", "lua/?/init.lua"],
"diagnostics.globals": ["vim", "jit"],
"diagnostics.globals": ["vim"],
"workspace.library": ["$VIMRUNTIME/lua", "${3rd}/luv/library"],
"workspace.checkThirdParty": false,
"completion.callSnippet": "Replace"

21
LICENSE
View file

@ -1,21 +0,0 @@
MIT License
Copyright (c) 2023 Raphael
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View file

@ -1,26 +0,0 @@
# http-codes.nvim
Quickly investigate HTTP status codes with [Mozilla](https://developer.mozilla.org/en-US/docs/Web/HTTP), with telescope, fzf-lua, and snacks.nvim integrations.
## Installation
Install with your package manager or via
[luarocks](https://luarocks.org/modules/barrettruth/http-codes.nvim):
```
luarocks install http-codes.nvim
```
## Dependencies
One of:
- [fzf-lua](https://github.com/ibhagwan/fzf-lua)
- [snacks.nvim](https://github.com/folke/snacks.nvim)
- [telescope.nvim](https://github.com/nvim-telescope/telescope.nvim)
## Documentation
```vim
:help http-codes.nvim
```

View file

@ -1,53 +1,39 @@
*http-codes* *http-codes.txt*
http-codes *http-codes.txt*
Author: Barrett Ruth <https://barrettruth.com>
Homepage: <https://github.com/barrett-ruth/http-codes.nvim>
Homepage: <https://github.com/barrettruth/http-codes.nvim>
===============================================================================
INTRODUCTION *http-codes.nvim*
http-codes.nvim lets you quickly investigate HTTP status codes using Mozilla
documentation, with telescope, fzf-lua, and snacks.nvim integrations.
http-codes.nvim lets you quickly investigate HTTP status codes with Mozilla,
supporting fzf-lua, snacks.nvim, and telescope.nvim.
===============================================================================
USAGE *:HTTPCodes*
>vim
:HTTPCodes
<
===============================================================================
MAPPINGS *http-codes-mappings*
*<Plug>(http-codes-pick)*
<Plug>(http-codes-pick) Open the HTTP status code picker.
Equivalent to |:HTTPCodes|.
Example configuration: >lua
vim.keymap.set('n', '<leader>hc', '<Plug>(http-codes-pick)')
<
===============================================================================
CONFIGURATION *vim.g.http_codes*
Configure via `vim.g.http_codes`:
CONFIGURATION *http-codes.config*
Configure via `vim.g.http_codes` before the plugin loads:
>lua
vim.g.http_codes = {
-- Picker: 'fzf-lua', 'snacks', or 'telescope' (auto-detected)
use = 'fzf-lua',
-- Command to open URLs (OS-specific by default)
open_url = 'xdg-open %s',
}
<
Options: ~
Default `open_url` by operating system:
{use} `(string|nil)`: Picker to use: 'fzf-lua', 'snacks', or
'telescope'. Auto-detected if not specified.
OS Default
-------- ---------------
Windows start %s
macOS open %s
Linux xdg-open %s
{open_url} `(string|nil)`: Command to open URLs. Uses `%s` as placeholder.
Defaults based on OS:
- Linux: 'xdg-open %s'
- macOS: 'open %s'
- Windows: 'start %s'
===============================================================================
COMMANDS *http-codes.commands*
:HTTPCodes Browse HTTP codes using the configured picker.
-------------------------------------------------------------------------------
vim:tw=80:ts=8:ft=help:
vim:tw=80:ft=help:

View file

@ -32,10 +32,7 @@ local function init()
end
if not config.use then
vim.notify_once(
'http-codes.nvim: install fzf-lua, snacks.nvim, or telescope.nvim',
vim.log.levels.ERROR
)
vim.notify_once('http-codes.nvim: install fzf-lua, snacks.nvim, or telescope.nvim', vim.log.levels.ERROR)
return false
end
@ -73,13 +70,7 @@ M.http_codes = M.pick
---@deprecated Use `vim.g.http_codes` instead
function M.setup(user_config)
vim.deprecate(
'require("http-codes").setup()',
'vim.g.http_codes',
'v0.1.0',
'http-codes.nvim',
false
)
vim.deprecate('require("http-codes").setup()', 'vim.g.http_codes', 'v0.1.0', 'http-codes.nvim', false)
if user_config then
vim.g.http_codes = vim.tbl_deep_extend('force', vim.g.http_codes or {}, user_config)

View file

@ -1,51 +1,51 @@
return {
['201 Created'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/201',
['202 Accepted'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/202',
['203 Non-Authoritative Information'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/203',
['204 No Content'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/204',
['205 Reset Content'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/205',
['206 Partial Content'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/206',
['300 Multiple Choices'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/300',
['301 Moved Permanently'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/301',
['302 Found'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/302',
['303 See Other'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/303',
['304 Not Modified'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/304',
['307 Temporary Redirect'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/307',
['308 Permanent Redirect'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/308',
['400 Bad Request'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/400',
['401 Unauthorized'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/401',
['402 Payment Required'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/402',
['403 Forbidden'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/403',
['404 Not Found'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404',
['405 Method Not Allowed'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/405',
['406 Not Acceptable'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/406',
['407 Proxy Authentication Required'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/407',
['408 Request Timeout'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/408',
['409 Conflict'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/409',
['410 Gone'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/410',
['411 Length Required'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/411',
['412 Precondition Failed'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/412',
['413 Payload Too Large'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/413',
['414 URI Too Long'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/414',
['415 Unsupported Media Type'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/415',
['416 Range Not Satisfiable'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/416',
['417 Expectation Failed'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/417',
['422 Unprocessable Entity'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/422',
['425 Too Early'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/425',
['426 Upgrade Required'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/426',
['428 Precondition Required'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/428',
['429 Too Many Requests'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429',
['431 Request Header Fields Too Large'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/431',
['451 Unavailable For Legal Reasons'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/451',
['500 Internal Server Error'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/500',
['501 Not Implemented'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/501',
['502 Bad Gateway'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/502',
['503 Service Unavailable'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/503',
['504 Gateway Timeout'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/504',
['505 HTTP Version Not Supported'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/505',
['506 Variant Also Negotiates'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/506',
['507 Insufficient Storage'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/507',
['508 Loop Detected'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/508',
['510 Not Extended'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/510',
['511 Network Authentication Required'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/511',
['201 Created'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/201',
['202 Accepted'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/202',
['203 Non-Authoritative Information'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/203',
['204 No Content'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/204',
['205 Reset Content'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/205',
['206 Partial Content'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/206',
['300 Multiple Choices'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/300',
['301 Moved Permanently'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/301',
['302 Found'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/302',
['303 See Other'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/303',
['304 Not Modified'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/304',
['307 Temporary Redirect'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/307',
['308 Permanent Redirect'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/308',
['400 Bad Request'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/400',
['401 Unauthorized'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/401',
['402 Payment Required'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/402',
['403 Forbidden'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/403',
['404 Not Found'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404',
['405 Method Not Allowed'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/405',
['406 Not Acceptable'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/406',
['407 Proxy Authentication Required'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/407',
['408 Request Timeout'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/408',
['409 Conflict'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/409',
['410 Gone'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/410',
['411 Length Required'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/411',
['412 Precondition Failed'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/412',
['413 Payload Too Large'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/413',
['414 URI Too Long'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/414',
['415 Unsupported Media Type'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/415',
['416 Range Not Satisfiable'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/416',
['417 Expectation Failed'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/417',
['422 Unprocessable Entity'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/422',
['425 Too Early'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/425',
['426 Upgrade Required'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/426',
['428 Precondition Required'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/428',
['429 Too Many Requests'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429',
['431 Request Header Fields Too Large'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/431',
['451 Unavailable For Legal Reasons'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/451',
['500 Internal Server Error'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/500',
['501 Not Implemented'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/501',
['502 Bad Gateway'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/502',
['503 Service Unavailable'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/503',
['504 Gateway Timeout'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/504',
['505 HTTP Version Not Supported'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/505',
['506 Variant Also Negotiates'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/506',
['507 Insufficient Storage'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/507',
['508 Loop Detected'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/508',
['510 Not Extended'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/510',
['511 Network Authentication Required'] = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/511',
}

View file

@ -1,15 +1,15 @@
local codes = require('http-codes.codes')
local codes = require 'http-codes.codes'
return {
pick = function(open_url)
require('fzf-lua').fzf_exec(vim.tbl_keys(codes), {
actions = {
default = function(selected)
local link = codes[selected[1]]
pick = function(open_url)
require('fzf-lua').fzf_exec(vim.tbl_keys(codes), {
actions = {
default = function(selected)
local link = codes[selected[1]]
vim.fn.jobstart(open_url:format(link))
end,
},
})
end,
vim.fn.jobstart(open_url:format(link))
end,
},
})
end,
}

View file

@ -1,23 +1,17 @@
local OS_TO_OPEN_URL = {
OSX = 'open %s',
Windows = 'start %s',
OSX = 'open %s',
Windows = 'start %s',
}
local function get_os()
if jit then
return jit.os
end
if jit then return jit.os end
local fh, _ = assert(io.popen('uname -o 2>/dev/null', 'r'))
if fh then
return fh:read()
end
local fh, _ = assert(io.popen('uname -o 2>/dev/null', 'r'))
if fh then return fh:read() end
return fh and fh:read() or 'Windows'
return fh and fh:read() or 'Windows'
end
return {
get_open_url = function()
return OS_TO_OPEN_URL[get_os()] or 'xdg-open %s'
end,
get_open_url = function() return OS_TO_OPEN_URL[get_os()] or 'xdg-open %s' end,
}

View file

@ -1,37 +1,35 @@
local codes = require('http-codes.codes')
local codes = require 'http-codes.codes'
local cached_items = nil
local function codes_to_snack_items(codes_map)
if cached_items then
return cached_items
end
local function codes_to_snack_items(codes)
if cached_items then return cached_items end
local items = {}
local items = {}
local idx = 1
for status, _ in pairs(codes_map) do
table.insert(items, { idx = idx, text = status })
idx = idx + 1
end
cached_items = items
return items
local idx = 1
for status, _ in pairs(codes) do
table.insert(items, { idx = idx, text = status })
idx = idx + 1
end
cached_items = items
return items
end
return {
pick = function(open_url)
require('snacks.picker').pick(nil, {
title = 'HTTP Codes',
items = codes_to_snack_items(codes),
format = 'text',
layout = {
preset = 'select',
hidden = { 'preview' },
},
confirm = function(picker, item)
local link = codes[item.text]
picker:close()
vim.fn.jobstart(open_url:format(link))
end,
})
end,
pick = function(open_url)
require('snacks.picker').pick(nil, {
title = 'HTTP Codes',
items = codes_to_snack_items(codes),
format = 'text',
layout = {
preset = 'select',
hidden = { 'preview' },
},
confirm = function(picker, item)
local link = codes[item.text]
picker:close()
vim.fn.jobstart(open_url:format(link))
end,
})
end,
}

View file

@ -1,5 +1,3 @@
return {
setup = function()
require('telescope').load_extension('http')
end,
setup = function() require('telescope').load_extension 'http' end,
}

View file

@ -1,5 +1,5 @@
local list = require('telescope._extensions.http.list')
local list = require 'telescope._extensions.http.list'
return require('telescope').register_extension({
exports = { list = list },
})
return require('telescope').register_extension {
exports = { list = list },
}

View file

@ -1,30 +1,30 @@
local actions = require('telescope.actions')
local finders = require('telescope.finders')
local pickers = require('telescope.pickers')
local sorters = require('telescope.sorters')
local state = require('telescope.actions.state')
local actions = require 'telescope.actions'
local finders = require 'telescope.finders'
local pickers = require 'telescope.pickers'
local sorters = require 'telescope.sorters'
local state = require 'telescope.actions.state'
local codes = require('http-codes.codes')
local codes = require 'http-codes.codes'
return function(open_url)
pickers
.new(nil, {
prompt_title = 'HTTP Codes',
finder = finders.new_table({
results = vim.tbl_keys(codes),
}),
sorter = sorters.get_generic_fuzzy_sorter(),
attach_mappings = function(prompt_bufnr, _)
actions.select_default:replace(function()
actions.close(prompt_bufnr)
pickers
.new(nil, {
prompt_title = 'HTTP Codes',
finder = finders.new_table {
results = vim.tbl_keys(codes),
},
sorter = sorters.get_generic_fuzzy_sorter(),
attach_mappings = function(prompt_bufnr, _)
actions.select_default:replace(function()
actions.close(prompt_bufnr)
local selection = state.get_selected_entry()
local link = codes[selection[1]]
local selection = state.get_selected_entry()
local link = codes[selection[1]]
vim.fn.jobstart(open_url:format(link))
end)
return true
end,
})
:find()
vim.fn.jobstart(open_url:format(link))
end)
return true
end,
})
:find()
end

View file

@ -6,7 +6,3 @@ vim.g.loaded_http_codes = 1
vim.api.nvim_create_user_command('HTTPCodes', function()
require('http-codes').pick()
end, {})
vim.keymap.set('n', '<Plug>(http-codes-pick)', function()
require('http-codes').pick()
end, { desc = 'Pick HTTP status code' })

47
readme.md Normal file
View file

@ -0,0 +1,47 @@
# http-codes.nvim
Quickly investigate HTTP status codes with the help of [Mozilla](https://developer.mozilla.org/en-US/docs/Web/HTTP), with telescope, fzf-lua, and snacks.nvim integrations.
## Installation
Install using your package manager of choice or via [luarocks](https://luarocks.org/modules/barrettruth/http-codes.nvim):
```
luarocks install http-codes.nvim
```
## Dependencies
One of:
- [fzf-lua](https://github.com/ibhagwan/fzf-lua)
- [snacks.nvim](https://github.com/folke/snacks.nvim)
- [telescope.nvim](https://github.com/nvim-telescope/telescope.nvim)
## Configuration
Configure via `vim.g.http_codes` before the plugin loads:
```lua
vim.g.http_codes = {
use = 'fzf-lua', -- or 'snacks' or 'telescope', auto-detected by default
open_url = 'xdg-open %s', -- OS-specific by default
}
```
| OS | Default open_url |
| ------- | ---------------- |
| Windows | `start %s` |
| macOS | `open %s` |
| Linux | `xdg-open %s` |
## Usage
```vim
:HTTPCodes
```
## Documentation
```vim
:help http-codes.nvim
```