Skip to content

Latest commit

 

History

History
279 lines (238 loc) · 7.95 KB

README.md

File metadata and controls

279 lines (238 loc) · 7.95 KB

ProjectLinter

Go

CLI tool that monitors and evaluates the file structure of a directory and its subdirectories to enforce a specific file structure pattern for a particular programming language

Demo

Default Templates

Ubuntu.20.04.on.Windows.2023-10-29.18-38-29.mp4

Custom Template

📄 Note: The structure.json file should be placed in the project directory.

84146a28-f2a6-4c25-b2b0-b93fe91afa22.mp4
Example structure.json file
// structure.json
{
	"IgnoreDir": {
		".git",
		"node_modules",
		".next",
	},
	"RootFiles": {
		"package.json",
		"package-lock.json",
		"tailwind.config.js",
		"tailwind.config.ts",
		"tsconfig.json",
		"tslint.json",
		"webpack.config.js",
		"yarn.lock",
		"postcss.config.js",
		".eslintrc.json",
		"LICENSE",
		"README.md",
		"CODE_OF_CONDUCT.md",
		".env",
		".env.local",
		".gitignore",
		"app.js",
	},
	"RootDirs": {
		"public",
		"src",
		"tests",
		"config",
		"typings",
	},
	"NonRootFiles": {
		// JS
		"config/database.js",
		"config/routes.js",
		"config/environment.js",
		// TS
		"config/constants.ts",
		"config/routes.ts",
	},
	"NonRootDirs": {
		// JS
		"src/controllers",
		"src/models",
		"src/routes",
		"src/views",
		// TS
		"src/components",
		"src/containers",
		"src/services",
		"src/styles",
		"src/assets",
		"config/env",
		"config/",
	},
	"DirectoryFileExtensions": {
		"public": {
			".html":true,
			".js":true,
			".css":true,
		},
		"src": {
			".ts":true,
		},
	},
}

Project structure

Javascript and Typescript (node.js)
my-node-app/
  ├── node_modules/        (Dependencies installed via npm)
  ├── public/              (Static files like HTML, CSS, client-side JavaScript)
  ├── src/                 (Source code)
  │   ├── controllers/     (Route handlers)
  │   ├── models/          (Database models)
  │   ├── routes/          (Express.js route definitions)
  │   ├── views/           (Template files, if using a template engine)
  ├── config/              (Configuration files)
  │   ├── database.js      (Database configuration)
  │   ├── routes.js        (Route configuration)
  │   ├── environment.js   (Environment-specific settings)
  ├── tests/               (Test files)
  ├── package.json         (Node.js package configuration)
  ├── package-lock.json    (Dependency lock file)
  ├── .gitignore           (Git ignore rules)
  ├── .env                 (Environment variables, not in version control)
  ├── app.js               (Main application file)
  ├── README.md            (Documentation)
my-typescript-project/
  ├── node_modules/        (Dependencies installed via npm or yarn)
  ├── src/                 (Source code)
  │   ├── components/      (Reusable UI components)
  │   ├── containers/      (Higher-level components that manage state)
  │   ├── services/        (API services, utilities, and helpers)
  │   ├── styles/          (CSS or SCSS files)
  │   ├── assets/          (Static assets like images)
  ├── public/              (Publicly accessible files, e.g., index.html)
  ├── tests/               (Test files)
  ├── config/              (Configuration files)
  │   ├── env/             (Environment-specific configuration)
  │   ├── constants.ts     (Application constants)
  │   ├── routes.ts        (Route definitions)
  ├── typings/             (Custom type definitions, if needed)
  ├── .gitignore           (Git ignore rules)
  ├── tsconfig.json        (TypeScript configuration)
  ├── package.json         (Node.js package configuration)
  ├── package-lock.json    (Dependency lock file)
  ├── README.md            (Documentation)

Go (Web app)
my-go-web-app/
  ├── assets/            (Static assets like CSS, JavaScript, and images)
  ├── templates/         (HTML templates if not using a frontend framework)
  ├── cmd/               (Application entry points)
  │   ├── main.go        (Main application entry point)
  ├── internal/          (Internal application packages)
  │   ├── handlers/     (HTTP request handlers)
  │   ├── models/       (Data models)
  │   ├── middleware/   (HTTP middleware)
  │   ├── config/       (Application configuration)
  ├── pkg/               (Reusable packages)
  ├── vendor/            (Vendor directory for dependencies - if not using Go Modules)
  ├── go.mod             (Go module file)
  ├── go.sum             (Dependency checksum file)
  ├── .gitignore         (Git ignore rules)
  ├── README.md          (Documentation)
Go (CLI)
my-go-cli/
  ├── cmd/               (Application entry points)
  │   ├── mycli/         (CLI application source code)
  │   │   ├── main.go    (Main CLI application entry point)
  ├── internal/          (Internal application packages)
  ├── pkg/               (Reusable packages)
  ├── vendor/            (Vendor directory for dependencies - if not using Go Modules)
  ├── go.mod             (Go module file)
  ├── go.sum             (Dependency checksum file)
  ├── .gitignore         (Git ignore rules)
  ├── README.md          (Documentation)
PHP (Web app)
my-php-web-app/
  ├── app/
  │   ├── Controllers/     (Controller classes)
  │   ├── Models/          (Model classes)
  │   ├── Views/           (View templates)
  ├── config/              (Application configuration)
  │   ├── database.php     (Database configuration)
  ├── public/              (Publicly accessible files, e.g., index.php, assets)
  ├── resources/           (Non-public resources like language files or raw assets)
  ├── routes/              (Route definitions)
  ├── tests/               (Test files)
  ├── vendor/              (Composer dependencies)
  ├── .env                 (Environment-specific settings)
  ├── .gitignore           (Git ignore rules)
  ├── composer.json        (Composer configuration)
  ├── composer.lock        (Composer lock file)
  ├── README.md            (Documentation)
Lua (Neovim plugin)
my-neovim-plugin/
  ├── plugin/            (Your plugin's main Lua file)
  ├── lua/               (Additional Lua code, organized by functionality)
  │   ├── my_plugin.lua  (Your plugin's main Lua code)
  │   ├── commands.lua   (Neovim commands)
  │   ├── mappings.lua   (Key mappings)
  │   ├── utils.lua      (Utility functions)
  ├── doc/               (Documentation for your plugin)
  ├── test/              (Test files for your plugin)
  ├── README.md          (Plugin documentation)

Todo

  • Traverse through a specifed directory
  • Ignore dot files
  • Selection option for different kind of projects
  • Restructure this project based on common convention
  • Modules for each kind of project
    • JavaScript (node.js)
    • Go (Web app)
    • Go (CLI)
    • PHP (Web app)
    • Lua (Neovim plugin)
    • Other
  • Sub directory file type validation
  • Restrict file types in a specific directory
  • Add CLI survey for file extension validation
  • Make CLI more readable (spaces and colors)
  • Documentation
    • README
    • Man page
  • Golang executables for different platforms
  • First release (compressed file and compiled program)