Skip to content

Commit 829e84b

Browse files
committed
added rewrite vars to finals and vice versa
added option to extract constructor params as var or final remove full cache invalidation before rename / refactor operation
1 parent e1e6e9a commit 829e84b

File tree

7 files changed

+59
-335
lines changed

7 files changed

+59
-335
lines changed

haxe_libraries/rename.hxml

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
# @install: lix --silent download "gh://github.com/HaxeCheckstyle/haxe-rename#3001ac0d3519e197dd130edd4eb65b606df4f842" into rename/2.3.1/github/3001ac0d3519e197dd130edd4eb65b606df4f842
2-
-cp ${HAXE_LIBCACHE}/rename/2.3.1/github/3001ac0d3519e197dd130edd4eb65b606df4f842/src
1+
# @install: lix --silent download "gh://github.com/HaxeCheckstyle/haxe-rename#fe2a4879980005da4628325875817780c5b14b51" into rename/2.3.1/github/fe2a4879980005da4628325875817780c5b14b51
2+
-cp ${HAXE_LIBCACHE}/rename/2.3.1/github/fe2a4879980005da4628325875817780c5b14b51/src
33
-D rename=2.3.1

src/haxeLanguageServer/features/haxe/RefactorFeature.hx

+44-18
Original file line numberDiff line numberDiff line change
@@ -25,32 +25,35 @@ class RefactorFeature implements CodeActionContributor {
2525
public function createCodeActions(params:CodeActionParams):Array<CodeAction> {
2626
var actions:Array<CodeAction> = [];
2727
if (params.context.only != null) {
28-
if (params.context.only.contains(Refactor)) {}
29-
if (params.context.only.contains(RefactorExtract)) {
30-
actions = actions.concat(extractRefactors(params));
31-
}
32-
if (params.context.only.contains(RefactorRewrite)) {}
33-
// if (params.context.only.contains(RefactorMove)) {} // upcoming LSP 3.18.0
34-
if (params.context.only.contains(RefactorInline)) {}
28+
actions = actions.concat(extractRefactors(params, i -> {
29+
if (i == null) {
30+
return false;
31+
}
32+
return params.context.only.contains(i.codeActionKind);
33+
}));
3534
} else {
36-
actions = actions.concat(extractRefactors(params));
35+
actions = actions.concat(extractRefactors(params, i -> true));
3736
}
3837

3938
return actions;
4039
}
4140

42-
function extractRefactors(params:CodeActionParams):Array<CodeAction> {
41+
function extractRefactors(params:CodeActionParams, filterType:FilterRefactorModuleCB):Array<CodeAction> {
4342
var actions:Array<CodeAction> = [];
4443
final canRefactorContext = refactorCache.makeCanRefactorContext(context.documents.getHaxe(params.textDocument.uri), params.range);
4544
if (canRefactorContext == null) {
4645
return actions;
4746
}
48-
var refactorInfo:Array<Null<RefactorInfo>> = [
47+
var allRefactorInfos:Array<Null<RefactorInfo>> = [
4948
getRefactorInfo(ExtractInterface),
5049
getRefactorInfo(ExtractMethod),
5150
getRefactorInfo(ExtractType),
52-
getRefactorInfo(ExtractConstructorParams),
51+
getRefactorInfo(ExtractConstructorParamsAsVars),
52+
getRefactorInfo(ExtractConstructorParamsAsFinals),
53+
getRefactorInfo(RewriteVarsToFinals),
54+
getRefactorInfo(RewriteFinalsToVars),
5355
];
56+
final refactorInfo = allRefactorInfos.filter(filterType);
5457
refactorCache.updateSingleFileCache(canRefactorContext.what.fileName);
5558
for (refactor in refactorInfo) {
5659
if (refactor == null) {
@@ -62,7 +65,6 @@ class RefactorFeature implements CodeActionContributor {
6265
actions.push(makeEmptyCodeAction(title, refactor.codeActionKind, params, refactor.type));
6366
}
6467
}
65-
6668
return actions;
6769
}
6870

@@ -94,13 +96,37 @@ class RefactorFeature implements CodeActionContributor {
9496
title: "extractType",
9597
prefix: "[ExtractType]"
9698
}
97-
case ExtractConstructorParams:
99+
case ExtractConstructorParamsAsVars:
100+
return {
101+
refactorType: RefactorExtractConstructorParams(false),
102+
type: type,
103+
codeActionKind: RefactorExtract,
104+
title: "extractConstructorParamsAsVars",
105+
prefix: "[ExtractConstructorParams as Vars]"
106+
}
107+
case ExtractConstructorParamsAsFinals:
98108
return {
99-
refactorType: RefactorExtractConstructorParams,
109+
refactorType: RefactorExtractConstructorParams(true),
100110
type: type,
101111
codeActionKind: RefactorExtract,
102-
title: "extractConstructorParams",
103-
prefix: "[ExtractConstructorParams]"
112+
title: "extractConstructorParamsAsFinals",
113+
prefix: "[ExtractConstructorParams as Finals]"
114+
}
115+
case RewriteVarsToFinals:
116+
return {
117+
refactorType: RefactorRewriteVarsToFinals(true),
118+
type: type,
119+
codeActionKind: RefactorRewrite,
120+
title: "refactorRewriteVarsToFinals",
121+
prefix: "[RefactorRewriteVarsToFinals]"
122+
}
123+
case RewriteFinalsToVars:
124+
return {
125+
refactorType: RefactorRewriteVarsToFinals(false),
126+
type: type,
127+
codeActionKind: RefactorRewrite,
128+
title: "refactorRewriteFinalsToVars",
129+
prefix: "[RefactorRewriteFinalsToVars]"
104130
}
105131
}
106132
}
@@ -115,7 +141,6 @@ class RefactorFeature implements CodeActionContributor {
115141

116142
public function createCodeActionEdits(context:Context, type:CodeActionResolveType, action:CodeAction, params:CodeActionParams):Promise<WorkspaceEdit> {
117143
var endProgress = context.startProgress("Performing Refactor Operation…");
118-
119144
var actions:Array<CodeAction> = [];
120145
final editList:EditList = new EditList();
121146
final refactorContext = refactorCache.makeRefactorContext(context.documents.getHaxe(params.textDocument.uri), params.range, editList);
@@ -127,7 +152,6 @@ class RefactorFeature implements CodeActionContributor {
127152
return Promise.reject("failed to make refactor context");
128153
}
129154
final onResolve:(?result:Null<Dynamic>, ?debugInfo:Null<String>) -> Void = context.startTimer("refactor/" + info.title);
130-
refactorCache.updateFileCache();
131155
return Refactoring.doRefactor(info.refactorType, refactorContext).then((result:RefactorResult) -> {
132156
var promise = switch (result) {
133157
case NoChange:
@@ -166,3 +190,5 @@ typedef RefactorInfo = {
166190
var title:String;
167191
var prefix:String;
168192
}
193+
194+
typedef FilterRefactorModuleCB = (info:Null<RefactorInfo>) -> Bool;

src/haxeLanguageServer/features/haxe/RenameFeature.hx

-1
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,6 @@ class RenameFeature {
7777
var endProgress = context.startProgress("Performing Rename Operation…");
7878

7979
final filePath:FsPath = uri.toFsPath();
80-
refactorCache.updateFileCache();
8180

8281
final editList:EditList = new EditList();
8382
refactor.Rename.rename(refactorCache.makeRenameContext(doc, filePath, params.position, params.newName, editList)).then((result:RefactorResult) -> {

src/haxeLanguageServer/features/haxe/codeAction/CodeActionFeature.hx

+8-6
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,10 @@ enum CodeActionResolveType {
2020
ExtractInterface;
2121
ExtractMethod;
2222
ExtractType;
23-
ExtractConstructorParams;
23+
ExtractConstructorParamsAsVars;
24+
ExtractConstructorParamsAsFinals;
25+
RewriteVarsToFinals;
26+
RewriteFinalsToVars;
2427
}
2528

2629
typedef CodeActionResolveData = {
@@ -65,9 +68,6 @@ class CodeActionFeature {
6568
registerContributor(new ExtractConstantFeature(context));
6669
registerContributor(new DiagnosticsCodeActionFeature(context));
6770
registerContributor(refactorFeature);
68-
#if debug
69-
// registerContributor(new ExtractFunctionFeature(context));
70-
#end
7171
}
7272

7373
public function registerContributor(contributor:CodeActionContributor) {
@@ -99,7 +99,8 @@ class CodeActionFeature {
9999
return;
100100
}
101101
case AddTypeHint:
102-
case ExtractInterface | ExtractMethod | ExtractType | ExtractConstructorParams:
102+
case ExtractInterface | ExtractMethod | ExtractType | ExtractConstructorParamsAsVars | ExtractConstructorParamsAsFinals | RewriteVarsToFinals |
103+
RewriteFinalsToVars:
103104
}
104105
switch (type) {
105106
case MissingArg, ChangeFinalToVar, AddTypeHint:
@@ -126,7 +127,8 @@ class CodeActionFeature {
126127
arguments: command.arguments ?? []
127128
});
128129
}).catchError((e) -> reject(e));
129-
case ExtractInterface | ExtractMethod | ExtractType | ExtractConstructorParams:
130+
case ExtractInterface | ExtractMethod | ExtractType | ExtractConstructorParamsAsVars | ExtractConstructorParamsAsFinals | RewriteVarsToFinals |
131+
RewriteFinalsToVars:
130132
refactorFeature.createCodeActionEdits(context, type, action, params).then(workspaceEdit -> {
131133
action.edit = workspaceEdit;
132134
resolve(action);

0 commit comments

Comments
 (0)