# .cursorrules
rules:
# General TypeScript Rules
- match: "*.ts"
rules:
- description: "Prefer explicit types for variables and function returns"
regex: "(let|const) [a-zA-Z_][a-zA-Z0-9_]* ="
replace: "$1 $2: type ="
message: "Specify the type explicitly for better readability and type safety."
- description: "Use camelCase for variable and function names"
regex: "(let|const|function) [a-z0-9_]+"
replace: "$1 camelCaseName"
message: "Use camelCase for variable and function names to maintain consistency."
- description: "Use PascalCase for class and interface names"
regex: "(class|interface) [a-z][a-zA-Z0-9_]+"
replace: "$1 PascalCaseName"
message: "Use PascalCase for class and interface names for consistency."
# EdgeDB-js Rules
- match: "*.ts"
rules:
- description: "Prefer using edgeql-js query builder over raw EdgeQL strings"
regex: "client\\.query\\(`"
replace: "e.<query_method>()"
message: "Use the edgeql-js query builder for type-safe and readable queries."
- description: "Use generated edgeql-js types for better type safety"
regex: "any"
replace: "<GeneratedEdgeDBType>"
message: "Replace 'any' with specific EdgeDB types generated by edgeql-js."
# Hono Framework Rules
- match: "*.ts"
rules:
- description: "Use Hono's request handler typing for type-safe route handlers"
regex: "async function (req, res)"
replace: "async (c: Context) =>"
message: "Use Hono's context type for request handlers to ensure type safety."
# File Structure Rules for Atomic Files
- match: "*.ts"
rules:
- description: "Limit to one export per file to ensure atomic file structure"
regex: "(export const|export function|export class) .*\\n(export const|export function|export class)"
replace: ""
message: "Consider breaking this file into multiple files with a single export per file."
- description: "Ensure file names reflect their content and purpose (e.g., getUser.ts, createUserRoute.ts)"
regex: "(queries|routes)\\/(.*)\\.(ts|js)"
replace: "$1/$2.$3"
message: "Follow the naming convention: queries should describe the action (e.g., getUser.ts), and routes should reflect the endpoint or handler (e.g., createUserRoute.ts)."
# Enforce Documentation and Comments
- match: "*.ts"
rules:
- description: "Ensure all functions have JSDoc comments"
regex: "function [a-zA-Z_][a-zA-Z0-9_]*\\(.*\\)\\s*{"
replace: "/**\n * Description of the function\n * @param {type} param - Description of the parameter\n * @returns {type} Description of the return value\n */\n$0"
message: "Add JSDoc comments to functions to improve code readability and maintainability."
# Optimize Import Statements
- match: "*.ts"
rules:
- description: "Remove unused imports"
regex: "import .* from '.*';\\s*"
replace: ""
message: "Remove unused imports to keep the codebase clean."
- description: "Sort import statements alphabetically"
regex: "(import .+ from '.+');\\n(import .+ from '.+');"
replace: "$2\n$1"
message: "Sort import statements alphabetically for better readability."
# Error Handling Rules
- match: "*.ts"
rules:
- description: "Use a consistent error handling approach in async functions"
regex: "async function .+\$begin:math:text$.*\\$end:math:text$ \\{"
replace: "async function <functionName>(<params>) {\n try {\n // your code here\n } catch (error) {\n // handle error\n }\n}"
message: "Ensure consistent error handling in async functions using try/catch."
# Limit Function and Class Length
- match: "*.ts"
rules:
- description: "Limit function length to 30 lines for better readability and maintainability"
regex: "function [a-zA-Z_][a-zA-Z0-9_]*\$begin:math:text$.*\\$end:math:text$ {([^}]*)}"
replace: ""
message: "Refactor this function to reduce its length and improve readability."
- description: "Limit class length to 200 lines for better maintainability"
regex: "class [a-zA-Z_][a-zA-Z0-9_]* {([^}]*)}"
replace: ""
message: "Consider splitting this class into smaller, more focused classes."
# Additional Best Practices
- match: "*.ts"
rules:
- description: "Encourage the use of TypeScript interfaces for function parameters"
regex: "function [a-zA-Z_][a-zA-Z0-9_]*\$begin:math:text$([^)]*)\\$end:math:text$:"
replace: "interface FunctionParams {\n // define parameter types here\n}\n\nfunction <functionName>(params: FunctionParams):"
message: "Use TypeScript interfaces to define function parameters for better type safety."
css
edgeql
html
typescript
First Time Repository
Starter for Hono & EdgeDB using edgeql-js and EdgeDB generated TypeScript interfaces
TypeScript
Languages:
CSS: 0.7KB
EdgeQL: 8.4KB
HTML: 3.1KB
TypeScript: 46.8KB
Created: 9/6/2024
Updated: 9/30/2024
All Repositories (1)
Starter for Hono & EdgeDB using edgeql-js and EdgeDB generated TypeScript interfaces