git-ingest
Version:
Fast, AI-ready CLI tool that converts entire codebases into structured text files. Perfect for feeding projects to LLMs, code reviews, and documentation. Features streaming architecture, smart filtering, and cross-platform clipboard integration.
217 lines (207 loc) • 6.17 kB
JavaScript
import js from "@eslint/js";
import globals from "globals";
import nodePlugin from "eslint-plugin-n";
export default [
js.configs.recommended,
// Node.js specific configuration
{
plugins: {
n: nodePlugin
},
languageOptions: {
ecmaVersion: "latest",
sourceType: "module",
globals: {
...globals.node,
...globals.es2022
}
},
settings: {
node: {
version: ">=16.0.0"
}
},
rules: {
// Code style rules
indent: [
"error",
2,
{ SwitchCase: 1, ignoredNodes: ["ConditionalExpression"] }
],
"linebreak-style": ["error", "unix"],
quotes: ["error", "double", { avoidEscape: true }],
semi: ["error", "always"],
"comma-dangle": ["error", "never"],
"comma-spacing": ["error", { before: false, after: true }],
"comma-style": ["error", "last"],
"key-spacing": ["error", { beforeColon: false, afterColon: true }],
"keyword-spacing": ["error", { before: true, after: true }],
"object-curly-spacing": ["error", "always"],
"array-bracket-spacing": ["error", "never"],
"space-before-blocks": ["error", "always"],
"space-before-function-paren": [
"error",
{
anonymous: "always",
named: "never",
asyncArrow: "always"
}
],
"space-in-parens": ["error", "never"],
"space-infix-ops": "error",
"space-unary-ops": ["error", { words: true, nonwords: false }],
// Variables and functions
"no-unused-vars": [
"error",
{
argsIgnorePattern: "^_",
varsIgnorePattern: "^_",
caughtErrorsIgnorePattern: "^_"
}
],
"no-console": "off",
"prefer-const": "error",
"no-var": "error",
"one-var": ["error", "never"],
// ES6+ features
"object-shorthand": "error",
"prefer-arrow-callback": "error",
"prefer-template": "error",
"template-curly-spacing": "error",
"arrow-spacing": "error",
"arrow-parens": ["error", "always"],
"arrow-body-style": ["error", "as-needed"],
"no-duplicate-imports": "error",
"no-useless-rename": "error",
"rest-spread-spacing": "error",
"prefer-destructuring": [
"warn",
{
array: false,
object: true
},
{
enforceForRenamedProperties: false
}
],
"prefer-spread": "error",
"prefer-rest-params": "error",
// Error prevention
"no-magic-numbers": [
"warn",
{
ignore: [-1, 0, 1, 2, 10, 100, 1000, 1024, 2048, 60000, 3600000],
ignoreArrayIndexes: true,
ignoreDefaultValues: true,
enforceConst: true,
detectObjects: false
}
],
"no-throw-literal": "error",
"prefer-promise-reject-errors": "error",
"require-await": "warn",
"no-return-await": "error",
// Best practices
"consistent-return": "warn",
"default-case": "warn",
"default-case-last": "error",
eqeqeq: ["error", "always"],
"guard-for-in": "error",
"no-caller": "error",
"no-empty-function": ["error", { allow: ["constructors"] }],
"no-eval": "error",
"no-extend-native": "error",
"no-extra-bind": "error",
"no-floating-decimal": "error",
"no-implicit-coercion": "error",
"no-lone-blocks": "error",
"no-loop-func": "error",
"no-multi-spaces": "error",
"no-new": "error",
"no-new-func": "error",
"no-new-wrappers": "error",
"no-param-reassign": [
"error",
{
props: true,
ignorePropertyModificationsFor: ["options", "config", "state"]
}
],
"no-return-assign": "error",
"no-script-url": "error",
"no-self-compare": "error",
"no-sequences": "error",
"no-unmodified-loop-condition": "error",
"no-unused-expressions": "error",
"no-useless-call": "error",
"no-useless-concat": "error",
"no-useless-return": "error",
"no-void": "error",
radix: "error",
"require-unicode-regexp": "warn",
"wrap-iife": ["error", "inside"],
yoda: "error",
// Node.js specific rules
"n/no-deprecated-api": ["error", { version: ">=16.0.0" }],
"n/no-unsupported-features/es-syntax": ["error", { version: ">=16.0.0" }],
"n/no-unsupported-features/node-builtins": [
"error",
{
version: ">=16.17.0"
}
],
"n/prefer-global/buffer": ["error", "always"],
"n/prefer-global/console": ["error", "always"],
"n/prefer-global/process": ["error", "always"],
"n/prefer-global/url": ["error", "always"],
"n/prefer-promises/dns": "error",
"n/prefer-promises/fs": "error",
"n/no-process-env": [
"error",
{
allowedVariables: ["NODE_ENV", "CI", "DEBUG", "TERM"]
}
],
"n/exports-style": ["error", "module.exports"],
"n/file-extension-in-import": "off", // Too strict for this project
"n/no-missing-import": "error",
"n/no-missing-require": "error",
"n/no-extraneous-import": "error",
"n/no-extraneous-require": "error"
}
},
// Test files configuration
{
files: ["**/*.test.js", "**/*.spec.js", "**/__tests__/**/*.js"],
languageOptions: {
globals: {
...globals.jest
}
},
rules: {
"no-unused-expressions": "off",
"no-magic-numbers": "off",
"prefer-arrow-callback": "off",
"require-await": "off",
"require-unicode-regexp": "off",
"consistent-return": "off",
"default-case": "off",
"n/no-unpublished-require": "off",
"n/no-unpublished-import": "off",
"n/no-process-env": "off",
"no-empty-function": [
"error",
{ "allow": ["arrowFunctions", "constructors"] }
]
}
},
// CLI and executable files
{
files: ["src/cli.js"],
rules: {
"n/hashbang": "error",
"n/no-process-exit": "off",
"no-magic-numbers": "off"
}
}
];