Initial commit

This commit is contained in:
Mist 2024-02-13 14:05:36 +08:00 committed by GitHub
commit b5e86f5d4f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
17 changed files with 227 additions and 0 deletions

31
.github/workflows/lint.yml vendored Normal file
View file

@ -0,0 +1,31 @@
name: Lint
on: push
jobs:
lint:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup nodejs
uses: actions/setup-node@v4
with:
node-version: latest
- name: Install commit message convention lib
run: npm i commitlint-config-wizardoc -D
- name: Check commit message
uses: wagoid/commitlint-github-action@v4
- name: Check code style
uses: JohnnyMorganz/stylua-action@v4
with:
token: ${{ secrets.GITHUB_TOKEN }}
version: latest
args: --check .

47
.github/workflows/release.yml vendored Normal file
View file

@ -0,0 +1,47 @@
name: Release
on:
push:
branches:
- main
jobs:
release:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup python
uses: actions/setup-python@v5
with:
python-version: "3.11"
- name: Replace template
run: python3 scripts/replace-template.py
- name: Commit changes
uses: EndBug/add-and-commit@v9
with:
message: "[Update] apply template"
- name: Read version from project config
id: read_toml
uses: SebRollen/toml-action@v1.0.2
with:
file: project.toml
field: project.version
- name: Bump version and push tag
id: tag_version
uses: mathieudutour/github-tag-action@v6.1
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
custom_tag: ${{ steps.read_toml.outputs.value }}
- name: Create a GitHub release
uses: ncipollo/release-action@v1
with:
tag: ${{ steps.tag_version.outputs.new_tag }}
name: Release ${{ steps.tag_version.outputs.new_tag }}
generateReleaseNotes: true

7
.gitignore vendored Normal file
View file

@ -0,0 +1,7 @@
# Lua
/luarocks
/lua_modules
/.luarocks
# OS
.DS_Store

13
README.md Normal file
View file

@ -0,0 +1,13 @@
<h1 align="center">Nvim Plugin Template</h1>
<p align="center">
<img src="https://img.shields.io/badge/Neovim-57A143?logo=neovim&logoColor=fff&style=for-the-badge" alt="Neovim" />
<img src="https://img.shields.io/badge/Made%20With%20Lua-2C2D72?logo=lua&logoColor=fff&style=for-the-badge" alt="made with lua" >
<img src="https://img.shields.io/github/actions/workflow/status/mistricky/nvim-plugin-template/release.yml?style=for-the-badge&label=release" alt="release action status" />
<img src="https://img.shields.io/github/actions/workflow/status/mistricky/nvim-plugin-template/lint.yml?style=for-the-badge&label=Lint" alt="release action status" />
</p>

4
commitlint.config.js Normal file
View file

@ -0,0 +1,4 @@
module.exports = {
// This line config will read the NPM package named "commitlint-config-wizardoc", so please make sure you have installed it before config this line.
extends: "wizardoc",
};

4
doc/plugin-name.txt Normal file
View file

@ -0,0 +1,4 @@
**plugin-name** description
Author: Mist <mist.zzh@gmail.com>
version: 0.0.2

9
lua/plugin-name/init.lua Normal file
View file

@ -0,0 +1,9 @@
local table_utils = require("utils.table")
local static = require("plugin-name.static")
local main = {}
function main.setup(config)
static.config = table_utils.merge(static.config, config)
end
return main

View file

@ -0,0 +1,3 @@
return {
config = {},
}

View file

@ -0,0 +1,12 @@
local command_util = {}
function command_util.exec_command(command, mode)
local handle = assert(io.popen(command, mode))
local origin = assert(handle:read("*a"))
handle:close()
return origin
end
return command_util

View file

@ -0,0 +1,23 @@
local list_utils = {}
function list_utils.find(list, predicate)
for _, value in ipairs(list) do
if predicate(value) then
return value
end
end
return nil
end
function list_utils.some(list, predicate)
return list_utils.find(list, predicate) ~= nil
end
function list_utils.includes(list, value)
return list_utils.find(list, function(item)
return item == value
end) ~= nil
end
return list_utils

View file

@ -0,0 +1,15 @@
local string_util = {}
function string_util.trim(str)
return str:gsub("%s+", "")
end
function string_util.escape(str)
return str:gsub("[%(%)%.%%%+%-%*%?%[%^%$%]]", "%%%1")
end
function string_util.ends_with(str, suffix)
return str:sub(-#suffix) == suffix
end
return string_util

View file

@ -0,0 +1,17 @@
local table_utils = {}
function table_utils.assign(t, props)
for k, v in pairs(props) do
t[k] = v
end
end
function table_utils.merge(t1, t2)
for k, v in pairs(t2) do
t1[k] = v
end
return t1
end
return table_utils

3
plugin/plugin-name.lua Normal file
View file

@ -0,0 +1,3 @@
local plugin = require("plugin-name")
vim.api.nvim_create_user_command("CommandName", function() end, {})

6
project.toml Normal file
View file

@ -0,0 +1,6 @@
[project]
name = "plugin-name"
version = "0.0.2"
description = "description"
author = "Mist"
email = "mist.zzh@gmail.com"

View file

@ -0,0 +1,19 @@
from glob import glob
from typing import Callable, Final
from re import sub
from functools import reduce
import tomllib
PROJECT_CONFIG_PATH: Final = "project.toml"
TEMPLATE_PATH: Final = "template/**/*.template"
read_config: Callable[[str], dict] = lambda path: tomllib.load(open(path, 'rb'))
apply_config: Callable[[dict, list[str]], str] = lambda config, keys: reduce(lambda config, key: config[key], keys, config)
replace: Callable[[str, dict], str] = lambda content, config: sub(r"{{([^}]+)}}", lambda match: apply_config(config, match.group(1).split('.')), content)
update: Callable[[str, str], None] = lambda path, content: open(sub(r'^template/(.+)\.template$', r"\1", path), 'w').write(content)
for template in map(lambda file: {'path': file, 'content': replace(open(file, 'r').read(), read_config(PROJECT_CONFIG_PATH))}, glob(TEMPLATE_PATH)):
update(template['path'], template['content'])

10
stylua.toml Normal file
View file

@ -0,0 +1,10 @@
column_width = 120
line_endings = "Unix"
indent_type = "Spaces"
indent_width = 2
quote_style = "AutoPreferDouble"
call_parentheses = "Always"
collapse_simple_statement = "Never"
[sort_requires]
enabled = false

View file

@ -0,0 +1,4 @@
**{{project.name}}** {{project.description}}
Author: {{project.author}} <{{project.email}}>
version: {{project.version}}