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 ", "", " Add the following to your vimrc, or something sourced therein: >", "", " Plug 'esensar/{}'", "<", " Then install via `:PlugInstall`", "", " 2. 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", ".", "", "CONTRIBUTING *{}-contributing*", "", "Feel free to look at already reported issues at ", ".", "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", dispatch = "flutter test", }, ["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 = "tests/{}_spec.lua", }, ["tests/*_spec.lua"] = { type = "test", alternate = "lua/{}.lua", template = { 'local subject = require("{dot}")', "", 'describe("{dot}:", function()', "end)", }, }, ["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 kotlin_project_config = { ["src/main/kotlin/*.kt"] = { type = "source", template = { "package {dirname|dot}", "", "class {basename} {open}", "{close}", }, alternate = "src/test/kotlin/{}Test.kt", }, ["src/main/java/*.kt"] = { type = "source", template = { "package {dirname|dot}", "", "class {basename} {open}", "{close}", }, alternate = "src/test/java/{}Test.kt", }, ["src/test/kotlin/*Test.kt"] = { type = "test", template = { "package {dirname|dot}", "", "class {basename}Test {open}", "{close}", }, alternate = "src/main/kotlin/{}.kt", }, ["src/test/java/*Test.kt"] = { type = "test", template = { "package {dirname|dot}", "", "class {basename}Test {open}", "{close}", }, alternate = "src/main/java/{}.kt", }, ["src/main/resources/*"] = { type = "resource", }, ["src/test/resources/*"] = { type = "testresource", }, } local mint_config = { ["*"] = { start = "mint start", dispatch = "mint test", }, ["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", dispatch = "crystal spec", console = "crystal eval", }, ["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", dispatch = "make test", }, ["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 local rust_config = { ["*"] = { start = "cargo run", dispatch = "cargo test", }, ["src/*.rs"] = { type = "source", }, } local zig_config = { ["*"] = { start = "zig build run", dispatch = "zig test", }, ["src/*.zig"] = { type = "source", }, } local lein_config = { ["*"] = { start = "lein run", dispatch = "lein test", console = "lein repl", }, ["src/*.clj"] = { type = "source", alternate = { "test/{}_test.clj", }, }, ["src/*.cljs"] = { type = "source", alternate = { "test/{}_test.cljs", }, }, ["src/*.cljc"] = { type = "source", alternate = { "test/{}_test.cljc", }, }, ["test/*_test.clj"] = { type = "test", alternate = { "src/{}.clj", }, }, ["test/*_test.cljs"] = { type = "test", alternate = { "src/{}.cljs", }, }, ["test/*_test.cljc"] = { type = "test", alternate = { "src/{}.cljc", }, }, } 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, ["build.gradle|build.gradle.kts"] = kotlin_project_config, ["mint.json"] = mint_config, ["shard.yml"] = crystal_config, ["Cargo.toml"] = rust_config, ["build.zig"] = zig_config, ["project.clj"] = lein_config, }