Skip to content

Commit 13c56cf

Browse files
authored
feat: Add context value for folder (#365)
1 parent 63c954f commit 13c56cf

File tree

5 files changed

+24
-18
lines changed

5 files changed

+24
-18
lines changed

package.json

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -377,32 +377,22 @@
377377
},
378378
{
379379
"command": "java.view.package.renameFile",
380-
"when": "view == javaProjectExplorer && viewItem =~ /java:(package|packageRoot)(?=.*?\\b\\+source\\b)(?=.*?\\b\\+uri\\b)/",
381-
"group": "7_modification@10"
382-
},
383-
{
384-
"command": "java.view.package.renameFile",
385-
"when": "view == javaProjectExplorer && viewItem =~ /java:file(?=.*?\\b\\+uri\\b)/",
380+
"when": "view == javaProjectExplorer && viewItem =~ /java:(package|packageRoot)(?=.*?\\b\\+(source|resource)\\b)(?=.*?\\b\\+uri\\b)/",
386381
"group": "7_modification@10"
387382
},
388383
{
389384
"command": "java.view.package.renameFile",
390-
"when": "view == javaProjectExplorer && viewItem =~ /java:type(?=.*?\\b\\+uri\\b)/",
385+
"when": "view == javaProjectExplorer && viewItem =~ /java:(file|type|folder)(?=.*?\\b\\+uri\\b)/",
391386
"group": "7_modification@10"
392387
},
393388
{
394389
"command": "java.view.package.moveFileToTrash",
395-
"when": "view == javaProjectExplorer && viewItem =~ /java:(package|packageRoot)(?=.*?\\b\\+source\\b)(?=.*?\\b\\+uri\\b)/",
396-
"group": "7_modification@20"
397-
},
398-
{
399-
"command": "java.view.package.moveFileToTrash",
400-
"when": "view == javaProjectExplorer && viewItem =~ /java:file(?=.*?\\b\\+uri\\b)/",
390+
"when": "view == javaProjectExplorer && viewItem =~ /java:(package|packageRoot)(?=.*?\\b\\+(source|resource)\\b)(?=.*?\\b\\+uri\\b)/",
401391
"group": "7_modification@20"
402392
},
403393
{
404394
"command": "java.view.package.moveFileToTrash",
405-
"when": "view == javaProjectExplorer && viewItem =~ /java:type(?=.*?\\b\\+uri\\b)/",
395+
"when": "view == javaProjectExplorer && viewItem =~ /java:(file|type|folder)(?=.*?\\b\\+uri\\b)/",
406396
"group": "7_modification@20"
407397
},
408398
{

src/constants.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ export namespace Explorer {
1616
Jar = "jar",
1717
File = "file",
1818
Type = "type",
19+
Folder = "folder",
1920
}
2021
}
2122

src/explorerCommands/utils.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,9 @@ import { DataNode } from "../views/dataNode";
55

66
export function isMutable(node: DataNode): boolean {
77
// avoid modify dependency files
8-
const packageExp = /java:(package|packageRoot)(?=.*?\b\+source\b)(?=.*?\b\+uri\b)/;
9-
const fileExp = /java:file(?=.*?\b\+uri\b)/;
10-
const typeExp = /java:type(?=.*?\b\+uri\b)/;
8+
const packageExp = /java:(package|packageRoot)(?=.*?\b\+(source|resource)\b)(?=.*?\b\+uri\b)/;
9+
const resourceOrTypeExp = /java:(file|type|folder)(?=.*?\b\+uri\b)/;
1110

1211
const contextValue = node.computeContextValue();
13-
return packageExp.test(contextValue) || fileExp.test(contextValue) || typeExp.test(contextValue);
12+
return packageExp.test(contextValue) || resourceOrTypeExp.test(contextValue);
1413
}

src/views/folderNode.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// Licensed under the MIT license.
33

44
import { ThemeIcon } from "vscode";
5+
import { Explorer } from "../constants";
56
import { Jdtls } from "../java/jdtls";
67
import { INodeData, NodeKind } from "../java/nodeData";
78
import { DataNode } from "./dataNode";
@@ -41,4 +42,8 @@ export class FolderNode extends DataNode {
4142
protected get iconPath(): ThemeIcon {
4243
return new ThemeIcon("folder");
4344
}
45+
46+
protected get contextValue(): string {
47+
return Explorer.ContextValueType.Folder;
48+
}
4449
}

test/explorer/contextValue.test.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { INodeData, NodeKind, TypeKind } from "../../src/java/nodeData";
77
import { PackageRootKind } from "../../src/java/packageRootNodeData";
88
import { ContainerNode } from "../../src/views/containerNode";
99
import { FileNode } from "../../src/views/fileNode";
10+
import { FolderNode } from "../../src/views/folderNode";
1011
import { PackageNode } from "../../src/views/packageNode";
1112
import { PackageRootNode } from "../../src/views/packageRootNode";
1213
import { PrimaryTypeNode } from "../../src/views/PrimaryTypeNode";
@@ -84,6 +85,10 @@ suite("Context Value Tests", () => {
8485
test("test interface type node", async function() {
8586
assert.equal((await interfaceType.getTreeItem()).contextValue, "java:type+interface+uri");
8687
});
88+
89+
test("test folder node", async function() {
90+
assert.equal((await folder.getTreeItem()).contextValue, "java:folder+uri");
91+
});
8792
});
8893

8994
// below are faked nodes only for test purpose
@@ -211,3 +216,9 @@ const interfaceType: PrimaryTypeNode = new PrimaryTypeNode({
211216
TypeKind: TypeKind.Interface,
212217
},
213218
}, sourcePackage);
219+
220+
const folder: FolderNode = new FolderNode({
221+
name: "static",
222+
uri: Uri.file(__dirname).toString(),
223+
kind: NodeKind.Package,
224+
}, resourceRoot, mavenProject, resourceRoot);

0 commit comments

Comments
 (0)