MCPcopy Index your code
hub / github.com/codeaashu/claude-code / detectPluginDirectories

Function detectPluginDirectories

src/utils/jetbrains.ts:85–132  ·  view source on GitHub ↗
(ideName: string)

Source from the content-addressed store, hash-verified

83
84// Find all actual plugin directories that exist
85async function detectPluginDirectories(ideName: string): Promise<string[]> {
86 const foundDirectories: string[] = []
87 const fs = getFsImplementation()
88
89 const pluginDirPaths = buildCommonPluginDirectoryPaths(ideName)
90 const idePatterns = ideNameToDirMap[ideName.toLowerCase()]
91 if (!idePatterns) {
92 return foundDirectories
93 }
94
95 // Precompile once — idePatterns is invariant across baseDirs
96 const regexes = idePatterns.map(p => new RegExp('^' + p))
97
98 for (const baseDir of pluginDirPaths) {
99 try {
100 const entries = await fs.readdir(baseDir)
101 for (const regex of regexes) {
102 for (const entry of entries) {
103 if (!regex.test(entry.name)) continue
104 // Accept symlinks too — dirent.isDirectory() is false for symlinks,
105 // but GNU stow users symlink their JetBrains config dirs. Downstream
106 // fs.stat() calls will filter out symlinks that don't point to dirs.
107 if (!entry.isDirectory() && !entry.isSymbolicLink()) continue
108 const dir = join(baseDir, entry.name)
109 // Linux is the only OS to not have a plugins directory
110 if (platform() === 'linux') {
111 foundDirectories.push(dir)
112 continue
113 }
114 const pluginDir = join(dir, 'plugins')
115 try {
116 await fs.stat(pluginDir)
117 foundDirectories.push(pluginDir)
118 } catch {
119 // Plugin directory doesn't exist, skip
120 }
121 }
122 }
123 } catch {
124 // Ignore errors from stale IDE directories (ENOENT, EACCES, etc.)
125 continue
126 }
127 }
128
129 return foundDirectories.filter(
130 (dir, index) => foundDirectories.indexOf(dir) === index,
131 )
132}
133
134export async function isJetBrainsPluginInstalled(
135 ideType: IdeType,

Callers 1

Calls 4

getFsImplementationFunction · 0.85
platformFunction · 0.85
pushMethod · 0.45

Tested by

no test coverage detected