(ideName: string)
| 27 | // Build plugin directory paths |
| 28 | // https://www.jetbrains.com/help/pycharm/directories-used-by-the-ide-to-store-settings-caches-plugins-and-logs.html#plugins-directory |
| 29 | function buildCommonPluginDirectoryPaths(ideName: string): string[] { |
| 30 | const homeDir = homedir() |
| 31 | const directories: string[] = [] |
| 32 | const idePatterns = ideNameToDirMap[ideName.toLowerCase()] |
| 33 | if (!idePatterns) { |
| 34 | return directories |
| 35 | } |
| 36 | |
| 37 | const appData = process.env.APPDATA || join(homeDir, 'AppData', 'Roaming') |
| 38 | const localAppData = |
| 39 | process.env.LOCALAPPDATA || join(homeDir, 'AppData', 'Local') |
| 40 | |
| 41 | switch (platform()) { |
| 42 | case 'darwin': |
| 43 | directories.push( |
| 44 | join(homeDir, 'Library', 'Application Support', 'JetBrains'), |
| 45 | join(homeDir, 'Library', 'Application Support'), |
| 46 | ) |
| 47 | if (ideName.toLowerCase() === 'androidstudio') { |
| 48 | directories.push( |
| 49 | join(homeDir, 'Library', 'Application Support', 'Google'), |
| 50 | ) |
| 51 | } |
| 52 | break |
| 53 | |
| 54 | case 'win32': |
| 55 | directories.push( |
| 56 | join(appData, 'JetBrains'), |
| 57 | join(localAppData, 'JetBrains'), |
| 58 | join(appData), |
| 59 | ) |
| 60 | if (ideName.toLowerCase() === 'androidstudio') { |
| 61 | directories.push(join(localAppData, 'Google')) |
| 62 | } |
| 63 | break |
| 64 | |
| 65 | case 'linux': |
| 66 | directories.push( |
| 67 | join(homeDir, '.config', 'JetBrains'), |
| 68 | join(homeDir, '.local', 'share', 'JetBrains'), |
| 69 | ) |
| 70 | for (const pattern of idePatterns) { |
| 71 | directories.push(join(homeDir, '.' + pattern)) |
| 72 | } |
| 73 | if (ideName.toLowerCase() === 'androidstudio') { |
| 74 | directories.push(join(homeDir, '.config', 'Google')) |
| 75 | } |
| 76 | break |
| 77 | default: |
| 78 | break |
| 79 | } |
| 80 | |
| 81 | return directories |
| 82 | } |
| 83 | |
| 84 | // Find all actual plugin directories that exist |
| 85 | async function detectPluginDirectories(ideName: string): Promise<string[]> { |
no test coverage detected