Skip to content

ProverCoderAI/eslint-plugin-suggest-members

Repository files navigation

@prover-coder-ai/eslint-plugin-suggest-members

Production‑ready ESLint plugin that suggests corrections for typos in TypeScript/JavaScript code. Built with Functional Core / Imperative Shell and Effect‑TS.

✨ Key Features

  • Smart suggestions for typos (similarity scoring)
  • TypeScript‑aware diagnostics with signatures
  • Filesystem‑based module path suggestions
  • Fully typed, Effect‑TS based architecture

⚙️ Configuration (ESLint v9+ Flat Config)

// eslint.config.js
import suggestMembers from "@prover-coder-ai/eslint-plugin-suggest-members"

export default [
  {
    ...suggestMembers.configs.recommended,
    files: ["**/*.{ts,tsx,js,jsx}"]
  }
]

✅ Example Diagnostics

Export Suggestions (suggest-exports)

// ❌ Typo in React hook import
export { useStae, useEffect } from "react"
// ✅ ESLint Error: Export 'useStae' does not exist on type 'typeof import("react")'. Did you mean:
//    - useState
//    - useRef
//    - useMemo
//    - useCallback

Member Suggestions (suggest-members)

// ❌ Typo in localStorage method
localStorage.get1Item("token")
// ✅ ESLint Error: Property 'get1Item' does not exist on type 'Storage'. Did you mean:
//    - getItem(key: string): string | null
//    - setItem(key: string, value: string)
//    - removeItem(key: string)
//    - clear(): void

Module Path Suggestions (suggest-module-paths)

// ❌ Typo in file path
import styles from "./HamsterKo1mbatPage.css"
// ✅ ESLint Error: Cannot find module "./HamsterKo1mbatPage.css". Did you mean:
//    - ./HamsterKombatPage.css
//    - ./HamsterKombatPage.tsx
//    - ./HamsterKombatPage
//    - ../ThemeParamsPage.css

Import Suggestions (suggest-imports)

// ❌ Typo in named import
import { saveRe1f } from "./hooks"
// ✅ ESLint Error: Export 'saveRe1f' does not exist on type 'typeof import("./hooks")'. Did you mean:
//    - saveRef
//    - saveState
//    - useRef
//    - useState

Missing Name Suggestions (suggest-missing-names)

// ❌ Typo in local identifier
const formatGree1ting = () => "ok"
formatGreeting()
// ✅ ESLint Error: Cannot find name 'formatGreeting'. Did you mean:
//    - formatGree1ting(): string

📚 Rules

Name Description TS Required
suggest-exports Suggests corrections for missing exports
suggest-imports Suggests corrections for missing imports
suggest-members Suggests corrections for missing members
suggest-missing-names Suggests corrections for unresolved identifiers
suggest-module-paths Suggests corrections for missing module paths

Development

pnpm --filter @prover-coder-ai/eslint-plugin-suggest-members test