dotfiles/symlinks/config/nvim/plugin/projectionist.lua

432 lines
11 KiB
Lua

local vim_readme_template = {
"# Name",
"",
"## Requirements",
"",
"## Installation",
"",
"## Usage",
"",
"### Commands",
"",
"### Keymaps",
"",
"## License",
"",
"[LICENSE NAME](LICENSE)"
}
local vim_doc_template = {
"*{}.txt* Description",
"",
"INTRODUCTION *{}*",
"",
"Description",
"",
"CONTENTS *{}-contents*",
"",
" 1. Overview |{}-overview|",
" 2. Requirements |{}-requirements|",
" 3. Installation |{}-installation|",
" 4. Usage |{}-usage|",
" 5. Commands |{}-commands|",
" 6. Functions |{}-functions|",
" 7. Mappings |{}-mappings|",
" 8. Plugs |{}-plugs|",
" 9. Options |{}-options|",
" 10. Issues |{}-issues|",
" 11. Contributing |{}-contributing|",
" 12. Version |{}-version|",
" 13. License |{}-license|",
"",
"OVERVIEW *{}-overview*",
"",
"REQUIREMENTS *{}-requirements*",
"",
"INSTALLATION *{}-installation*",
"",
" 1. Plug <https://github.com/junegunn/vim-plug>",
"",
" Add the following to your vimrc, or something sourced therein: >",
"",
" Plug 'esensar/{}'",
"<",
" Then install via `:PlugInstall`",
"",
" 2. Pathogen <https://github.com/tpope/vim-pathogen> >",
"",
" cd ~/.vim/bundle",
" git clone https://github.com/esensar/{}.git",
"<",
" Then run `:Helptags`",
"",
" 3. Manual",
"",
" Clone this repository and copy the files in plugin/, autoload/, and doc/",
" to their respective directories in your vimfiles, or copy the text from",
" the github repository into new files in those directories. Make sure to",
" run `:helptags`.",
"",
"USAGE *{}-usage*",
"",
"COMMANDS *{}-commands*",
"",
"FUNCTIONS *{}-functions*",
"",
"MAPPINGS *{}-mappings*",
"",
"PLUGS *{}-plugs*",
"",
"OPTIONS *{}-options*",
"",
"ISSUES *{}-issues*",
"",
"If you experience issues using {}, please report them at",
"<https://github.com/esensar/{}/issues>.",
"",
"CONTRIBUTING *{}-contributing*",
"",
"Feel free to look at already reported issues at ",
"<https://github.com/esensar/{}/issues>.",
"If available, check out CONTRIBUTING.md in the repository.",
"Otherwise, feel free to create a new issue or pull request.",
"",
"VERSION *{}-version*",
"",
"Version 1.0.0",
"",
"LICENSE *{}-license*",
"",
"vim:tw=78:ts=2:ft=help:norl:"
}
local flutter_config = {
["*"] = {
start = "flutter run"
},
["lib/*.dart"] = {
alternate = "test/{}_test.dart",
type = "source"
},
["test/*_test.dart"] = {
alternate = "lib/{}.dart",
type = "test",
template = {
"import 'package:flutter_test/flutter_test.dart';",
"",
"import 'package:flutter_template/{}.dart';",
"",
"void main() {",
" testWidgets('', (WidgetTester tester) async {",
" });",
"}"
}
}
}
local python_config = {
["*.py"] = {
alternate = "tests/{dirname}/test_{basename}.py",
type = "source"
},
["tests/**/test_*.py"] = {
alternate = "{dirname}/{basename}.py",
type = "test",
template = {
"import unittest",
"from unittest import mock",
"",
"class {dirname|underscore|camelcase|capitalize}{basename|camelcase|capitalize}Test(unittest.TestCase):",
" pass",
"",
"",
"if __name__ == \"__main__\":",
" unittest.main()"
}
}
}
local dotnet_solution_config = {
["src/**/Controllers/*.cs"] = {
type = "controller",
alternate = {
"tests/{dirname}.Tests/Controllers/{basename}Tests.cs",
"tests/{dirname}.IntegrationTests/Controllers/{basename}Tests.cs"
}
},
["src/**/Models/*.cs"] = {
type = "model",
alternate = "tests/{dirname}.Tests/Models/{basename}Tests.cs"
},
["src/**/Views/*.cshtml"] = {
type = "view",
alternate = "tests/{dirname}.Tests/Views/{basename}Tests.cs"
},
["src/**/Services/*.cs"] = {
type = "service",
alternate = "tests/{dirname}.Tests/Services/{basename}Tests.cs"
},
["src/**/Extensions/*.cs"] = {
type = "extension",
alternate = "tests/{dirname}.Tests/Extensions/{basename}Tests.cs"
},
["*.csproj"] = {
type = "project"
},
["src/**/appsettings*json"] = {
type = "appsettings"
},
["src/*.cs"] = {
type = "source",
alternate = "tests/{dirname}.Tests/{basename}Tests.cs",
template = {
"using System;",
"",
"namespace {dirname|dot}",
"{",
" public class {basename}",
" {",
" }",
"}"
}
},
["tests/**.IntegrationTests/Controllers/*Tests.cs"] = {
type = "test",
alternate = "src/{dirname}/Controllers/{basename}.cs"
},
["tests/**.Tests/Controllers/*Tests.cs"] = {
type = "test",
alternate = "src/{dirname}/Controllers/{basename}.cs"
},
["tests/**.Tests/Views/*Tests.cs"] = {
type = "test",
alternate = "src/{dirname}/Views/{basename}.cs"
},
["tests/**.Tests/Models/*Tests.cs"] = {
type = "test",
alternate = "src/{dirname}/Models/{basename}.cs"
},
["tests/**.Tests/Services/*Tests.cs"] = {
type = "test",
alternate = "src/{dirname}/Services/{basename}.cs"
},
["tests/**.Tests/Extensions/*Tests.cs"] = {
type = "test",
alternate = "src/{dirname}/Extensions/{basename}.cs"
},
["tests/*Tests.cs"] = {
type = "test",
alternate = "src/{dirname}/{basename}.cs",
template = {
"using System;",
"",
"namespace {dirname|dot}",
"{",
" public class {basename}Tests",
" {",
" }",
"}"
}
}
}
local vim_plugin_config = {
["doc/*.txt"] = {
type = "help",
template = vim_doc_template
},
["autoload/*.vim"] = {
type = "autoload",
alternate = "test/{}.vader"
},
["test/*.vader"] = {
type = "test",
altername = "autoload/{}.vim"
},
["plugin/*.vim"] = {
type = "plugin",
template = {
"if exists(\"g:loaded_{}\") || &cp | finish | endif",
"",
"let g:loaded_{} = 1"
}
},
["README.md"] = {
template = vim_readme_template
}
}
local lua_vim_plugin_config = {
["doc/*.txt"] = {
type = "help",
template = vim_doc_template
},
["plugin/*.vim"] = {
type = "plugin",
template = {
"if exists(\"g:loaded_{}\") || &cp | finish | endif",
"",
"let g:loaded_{} = 1"
}
},
["lua/*.lua"] = {
type = "source",
alternate = "test/{}.lua"
},
["test/*.lua"] = {
type = "test",
alternate = "lua/{}.lua"
},
["README.md"] = {
template = vim_readme_template
}
}
local csharp_project_config = {
["*"] = {
start = "dotnet run",
console = "dotnet fsi"
}
}
local java_project_config = {
["src/main/java/*.java"] = {
type = "source",
template = {
"package {dirname|dot};",
"",
"public class {basename} {open}",
"{close}"
},
alternate = "src/test/java/{}Test.java"
},
["src/test/java/*Test.java"] = {
type = "test",
template = {
"package {dirname|dot};",
"",
"public class {basename}Test {open}",
"{close}"
},
alternate = "src/main/java/{}.java"
},
["src/main/java/module-info.java"] = {
type = "moduleinfo",
},
["src/main/java/**/package-info.java"] = {
type = "packageinfo",
},
["src/main/resources/*"] = {
type = "resource"
},
["src/test/resources/*"] = {
type = "testresource"
},
}
local mint_config = {
["*"] = {
start = "mint start"
},
["source/*.mint"] = {
type = "source",
template = {
"component {basename} {open}",
" style {basename|camelcase} {open}",
" {close}",
"",
" fun render : Html {open}",
" {close}",
"{close}"
},
alternate = "tests/{}.mint"
},
["tests/*.mint"] = {
type = "test",
template = {
"suite \"{basename}\" {open}",
" test \"A test\" {open}",
" with Test.Html {open}",
" {close}",
" {close}",
"{close}"
},
alternate = "source/{}.mint"
}
}
local crystal_config = {
["*"] = {
start = "crystal run"
},
["src/*.cr"] = {
type = "source",
template = {
"module {capitalize|colons}",
"end"
},
alternate = "spec/{}_spec.cr"
},
["spec/*_spec.cr"] = {
type = "spec",
template = {
"describe {capitalize|colons} do",
" # TODO Write tests",
"",
" it \"works\" do",
" false.should eq(true)",
" end",
"end"
},
alternate = "src/{}.cr"
}
}
local function c_project_config(source_extension, header_extension)
return {
["*"] = {
start = "make run"
},
["src/*." .. source_extension] = {
type = "source",
alternate = {
"src/{}." .. header_extension,
"test/{}." .. source_extension,
"include/{project|basename}/{}." .. header_extension,
}
},
["test/*." .. source_extension] = {
type = "test",
alternate = {
"src/{}." .. header_extension
}
},
["src/*." .. header_extension] = {
type = "header",
alternate = {
"src/{}." .. source_extension
}
},
["include/{project|basename}/*." .. header_extension] = {
type = "header",
alternate = {
"src/{}." .. header_extension
}
}
}
end
vim.g.projectionist_heuristics = {
["pubspec.yaml"] = flutter_config,
["requirements.txt|pyproject.toml"] = python_config,
["*.sln"] = dotnet_solution_config,
["*.csproj"] = csharp_project_config,
["plugin/|autoload/"] = vim_plugin_config,
["src/*.cpp|test/*.cpp"] = c_project_config("cpp", "hpp"),
["src/*.c|test/*.c"] = c_project_config("c", "h"),
["lua/"] = lua_vim_plugin_config,
["build.gradle|pom.xml"] = java_project_config,
["mint.json"] = mint_config,
["shard.yml"] = crystal_config
}