Skip to content

Commit 1c3333e

Browse files
add dev mode setting
1 parent 6e09a9f commit 1c3333e

4 files changed

Lines changed: 63 additions & 1 deletion

File tree

package.json

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,11 @@
203203
"contents": "$(check) Codacy CLI is installed. [Go to settings](command:workbench.action.openSettings?%22@ext:codacy-app.codacy%20cli%22).",
204204
"when": "codacy:canInstallCLI && codacy:cliInstalled"
205205
},
206+
{
207+
"view": "codacy:mcp",
208+
"contents": "$(warning) Development mode is enabled. [Reinstall dependencies](command:codacy.installCLIDependencies).",
209+
"when": "codacy:canInstallCLI && codacy:cliInstalled && codacy:devMode"
210+
},
206211
{
207212
"view": "codacy:mcp",
208213
"contents": "$(warning) Codacy CLI not found. [Install CLI](command:codacy.installCLI)",
@@ -439,6 +444,12 @@
439444
"disabled"
440445
],
441446
"default": "enabled"
447+
},
448+
"codacy.cli.devMode": {
449+
"type": "boolean",
450+
"title": "Enable development mode",
451+
"description": "When enabled, the extension will no longer initialize the Codacy CLI automatically. Enabling this option may result in a degraded user experience.",
452+
"default": false
442453
}
443454
}
444455
},

src/cli/MacCodacyCli.ts

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { CodacyError } from '../common/utils'
66
import { CODACY_FOLDER_NAME, CodacyCli } from './CodacyCli'
77
import Logger from '../common/logger'
88
import { ProcessedSarifResult, processSarifResults } from '.'
9+
import { Config } from '../common/config'
910

1011
export class MacCodacyCli extends CodacyCli {
1112
constructor(rootPath: string, provider?: string, organization?: string, repository?: string) {
@@ -113,6 +114,8 @@ export class MacCodacyCli extends CodacyCli {
113114
const cliConfigFilePath = path.join(this.rootPath, CODACY_FOLDER_NAME, 'cli-config.yaml')
114115
const toolsFolderPath = path.join(this.rootPath, CODACY_FOLDER_NAME, 'tools-configs')
115116

117+
const devMode = Config.devMode
118+
116119
const initFilesOk =
117120
fs.existsSync(configFilePath) && fs.existsSync(cliConfigFilePath) && fs.existsSync(toolsFolderPath)
118121
let needsInitialization = !initFilesOk
@@ -121,11 +124,20 @@ export class MacCodacyCli extends CodacyCli {
121124
// Check if the mode matches the current properties
122125
const cliConfig = fs.readFileSync(path.join(this.rootPath, CODACY_FOLDER_NAME, 'cli-config.yaml'), 'utf-8')
123126

124-
if ((cliConfig === 'mode: local' && this.repository) || (cliConfig === 'mode: remote' && !this.repository)) {
127+
if (
128+
((cliConfig === 'mode: local' && this.repository) || (cliConfig === 'mode: remote' && !this.repository)) &&
129+
!devMode
130+
) {
125131
needsInitialization = true
126132
}
127133
}
128134

135+
if (!needsInitialization && devMode) {
136+
// install dependencies
137+
await this.installDependencies()
138+
Logger.debug('Dev mode enabled. Skipping initialization.')
139+
}
140+
129141
if (needsInitialization) {
130142
const initParams = (
131143
this._accountToken && this.repository && this.provider && this.organization

src/common/config.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ export class Config {
55
private _wsConfig: vscode.WorkspaceConfiguration | undefined
66
private _apiToken: string | undefined
77
private _onboardingSkipped: boolean | undefined
8+
private _devMode: boolean | undefined
89

910
private static _instance: Config | undefined
1011

@@ -21,9 +22,15 @@ export class Config {
2122
const res = await Config._instance?._secretStorage.get('codacy.apiToken')
2223
Config._instance._apiToken = res
2324

25+
// Initialize dev mode from workspace configuration
26+
Config._instance._devMode = Config._instance._wsConfig?.get('cli.devMode') === true
27+
2428
if (Config._instance._apiToken) Logger.appendLine('Codacy API token found')
2529
if (Config._instance._onboardingSkipped) Logger.appendLine('No information about onboarding on Codacy found')
2630

31+
// Set dev mode context for views
32+
await vscode.commands.executeCommand('setContext', 'codacy:devMode', Config._instance._devMode)
33+
2734
this._onDidConfigChange.fire(Config._instance)
2835
return Config._instance
2936
}
@@ -65,4 +72,24 @@ export class Config {
6572
public static get apiToken(): string | undefined {
6673
return Config._instance?._apiToken
6774
}
75+
76+
public static get devMode(): boolean {
77+
return Config._instance?._devMode === true
78+
}
79+
80+
public static async updateDevMode() {
81+
if (!Config._instance) return
82+
83+
Config._instance._wsConfig = vscode.workspace.getConfiguration('codacy')
84+
const currentDevMode = Config._instance._wsConfig?.get('cli.devMode') === true
85+
const hasChanged = Config._instance._devMode !== currentDevMode
86+
87+
Config._instance._devMode = currentDevMode
88+
89+
if (hasChanged) {
90+
Logger.appendLine(`Dev mode ${currentDevMode ? 'enabled' : 'disabled'}`)
91+
await vscode.commands.executeCommand('setContext', 'codacy:devMode', currentDevMode)
92+
this._onDidConfigChange.fire(Config._instance)
93+
}
94+
}
6895
}

src/extension.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,9 @@ const registerCommands = async (context: vscode.ExtensionContext, codacyCloud: C
5050
'codacy.installCLI': async () => {
5151
await codacyCloud.cli?.install()
5252
},
53+
'codacy.installCLIDependencies': async () => {
54+
await codacyCloud.cli?.installDependencies()
55+
},
5356
'codacy.configureMCP': async () => {
5457
await configureMCP(codacyCloud.params)
5558
},
@@ -217,6 +220,15 @@ export async function activate(context: vscode.ExtensionContext) {
217220
})
218221
)
219222

223+
// listen for workspace configuration changes to handle dev mode changes
224+
context.subscriptions.push(
225+
vscode.workspace.onDidChangeConfiguration((e) => {
226+
if (e.affectsConfiguration('codacy.cli.devMode')) {
227+
Config.updateDevMode()
228+
}
229+
})
230+
)
231+
220232
// check for open repository
221233
if (gitProvider.state === 'initialized' && gitProvider.repositories.length > 0) {
222234
Logger.debug(`Found ${gitProvider.repositories.length} repositories, opening first one`)

0 commit comments

Comments
 (0)