Skip to content

Commit

Permalink
Introduces keybinding and setting to perform typical on-save cleanup …
Browse files Browse the repository at this point in the history
…actions manually

Signed-off-by: Hope Hadfield <hhadfiel@redhat.com>
  • Loading branch information
hopehadfield committed Jan 8, 2024
1 parent 392a255 commit b1a4972
Show file tree
Hide file tree
Showing 5 changed files with 64 additions and 7 deletions.
24 changes: 22 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,8 @@
"workspaceContains:.classpath",
"workspaceContains:*/.classpath",
"onCommand:_java.templateVariables",
"onCommand:_java.metadataFilesGeneration"
"onCommand:_java.metadataFilesGeneration",
"onCommand:java.action.filesExplorerPasteActionNoLS"
],
"main": "./dist/extension",
"contributes": {
Expand Down Expand Up @@ -1167,7 +1168,7 @@
"properties": {
"java.cleanup.actionsOnSave": {
"type": "array",
"markdownDescription": "The list of clean ups to be run on the current document when it's saved. Clean ups can automatically fix code style or programming mistakes. Click [HERE](command:_java.learnMoreAboutCleanUps) to learn more about what each clean up does.",
"markdownDescription": "The list of clean ups to be run on the current document when it's saved or when the cleanup command is issued. Clean ups can automatically fix code style or programming mistakes. Click [HERE](command:_java.learnMoreAboutCleanUps) to learn more about what each clean up does.",
"items": {
"type": "string",
"enum": [
Expand All @@ -1189,6 +1190,11 @@
"scope": "window",
"order": 10
},
"java.saveActions.enabled": {
"type": "boolean",
"default": true,
"description": "Enable/disable key for manual cleanup actions typically done on save"
},
"java.saveActions.organizeImports": {
"type": "boolean",
"default": false,
Expand Down Expand Up @@ -1513,6 +1519,11 @@
"command": "java.action.filesExplorerPasteAction",
"title": "%java.action.filesExplorerPasteAction%",
"category": "Java"
},
{
"command": "java.action.doCleanup",
"title": "%java.action.doCleanup%",
"category": "Java"
}
],
"keybindings": [
Expand All @@ -1536,6 +1547,11 @@
"key": "ctrl+shift+v",
"mac": "cmd+shift+v",
"when": "explorerViewletFocus && config.editor.pasteAs.enabled"
},
{
"command": "java.action.doCleanup",
"key": "ctrl+shift+alt+s",
"when": "javaLSReady && config.java.cleanup.manualKey && editorLangId == java"
}
],
"menus": {
Expand Down Expand Up @@ -1658,6 +1674,10 @@
{
"command": "java.action.filesExplorerPasteAction",
"when": "false"
},
{
"command": "java.action.doCleanup",
"when": "false"
}
],
"view/title": [
Expand Down
3 changes: 2 additions & 1 deletion package.nls.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,5 +26,6 @@
"java.clean.sharedIndexes": "Clean Shared Indexes",
"java.server.restart": "Restart Java Language Server",
"java.edit.smartSemicolonDetection": "Java Smart Semicolon Detection",
"java.action.filesExplorerPasteAction": "Paste clipboard text into a file"
"java.action.filesExplorerPasteAction": "Paste clipboard text into a file",
"java.action.doCleanup": "Performs cleanup actions"
}
1 change: 1 addition & 0 deletions src/commands.ts
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,7 @@ export namespace Commands {
* Organize imports silently.
*/
export const ORGANIZE_IMPORTS_SILENTLY = "java.edit.organizeImports";
export const MANUAL_CLEANUP = "java.action.doCleanup";
/**
* Handle a paste event.
*/
Expand Down
6 changes: 5 additions & 1 deletion src/protocol.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
'use strict';

import { Command, Range } from 'vscode';
import {
CodeActionParams,
ExecuteCommandParams,
Expand All @@ -13,7 +14,6 @@ import {
WorkspaceEdit,
WorkspaceSymbolParams,
} from 'vscode-languageclient';
import { Command, Range } from 'vscode';

/**
* The message type. Copied from vscode protocol
Expand Down Expand Up @@ -233,6 +233,10 @@ export namespace OrganizeImportsRequest {
export const type = new RequestType<CodeActionParams, WorkspaceEdit, void>('java/organizeImports');
}

export namespace ManualCleanupRequest {
export const type = new RequestType<TextDocumentIdentifier, WorkspaceEdit, void>('java/manualCleanup');
}

export interface ImportCandidate {
fullyQualifiedName: string;
id: string;
Expand Down
37 changes: 34 additions & 3 deletions src/sourceAction.ts
Original file line number Diff line number Diff line change
@@ -1,17 +1,37 @@
'use strict';

import { commands, window, ExtensionContext, ViewColumn, Uri, Disposable, workspace, TextEditorRevealType } from 'vscode';
import { Disposable, ExtensionContext, TextEditorRevealType, Uri, ViewColumn, commands, window, workspace } from 'vscode';
import { CodeActionParams, WorkspaceEdit } from 'vscode-languageclient';
import { LanguageClient } from 'vscode-languageclient/node';
import { Commands } from './commands';
import { ListOverridableMethodsRequest, AddOverridableMethodsRequest, CheckHashCodeEqualsStatusRequest, GenerateHashCodeEqualsRequest,
OrganizeImportsRequest, ImportCandidate, ImportSelection, GenerateToStringRequest, CheckToStringStatusRequest, VariableBinding, GenerateAccessorsRequest, CheckConstructorStatusRequest, GenerateConstructorsRequest, CheckDelegateMethodsStatusRequest, GenerateDelegateMethodsRequest, AccessorKind, AccessorCodeActionRequest, AccessorCodeActionParams } from './protocol';
import {
AccessorCodeActionParams,
AccessorCodeActionRequest,
AccessorKind,
AddOverridableMethodsRequest,
CheckConstructorStatusRequest,
CheckDelegateMethodsStatusRequest,
CheckHashCodeEqualsStatusRequest,
CheckToStringStatusRequest,
GenerateAccessorsRequest,
GenerateConstructorsRequest,
GenerateDelegateMethodsRequest,
GenerateHashCodeEqualsRequest,
GenerateToStringRequest,
ImportCandidate, ImportSelection,
ListOverridableMethodsRequest,
ManualCleanupRequest,
OrganizeImportsRequest,
VariableBinding
} from './protocol';
import { applyWorkspaceEdit } from './standardLanguageClient';
import { getActiveLanguageClient } from './extension';

export function registerCommands(languageClient: LanguageClient, context: ExtensionContext) {
registerOverrideMethodsCommand(languageClient, context);
registerHashCodeEqualsCommand(languageClient, context);
registerOrganizeImportsCommand(languageClient, context);
registerManualCleanupCommand(languageClient, context);
registerChooseImportCommand(context);
registerGenerateToStringCommand(languageClient, context);
registerGenerateAccessorsCommand(languageClient, context);
Expand Down Expand Up @@ -67,6 +87,17 @@ function registerOverrideMethodsCommand(languageClient: LanguageClient, context:
}));
}

function registerManualCleanupCommand(languageClient: LanguageClient, context: ExtensionContext): void {
context.subscriptions.push(commands.registerCommand(Commands.MANUAL_CLEANUP, async () => {
const languageClient: LanguageClient | undefined = await getActiveLanguageClient();
const document = window.activeTextEditor !== undefined ? window.activeTextEditor.document : undefined;
if (document !== undefined){
const workspaceEdit = await languageClient.sendRequest(ManualCleanupRequest.type, languageClient.code2ProtocolConverter.asTextDocumentIdentifier(document));
await applyWorkspaceEdit(workspaceEdit, languageClient);
}
}));
}

function registerHashCodeEqualsCommand(languageClient: LanguageClient, context: ExtensionContext): void {
context.subscriptions.push(commands.registerCommand(Commands.HASHCODE_EQUALS_PROMPT, async (params: CodeActionParams) => {
const result = await languageClient.sendRequest(CheckHashCodeEqualsStatusRequest.type, params);
Expand Down

0 comments on commit b1a4972

Please sign in to comment.