Skip to content

Project Panel #1382

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 9 commits into from
Feb 27, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 48 additions & 0 deletions assets/test/targets/Package.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
// swift-tools-version: 5.6
// The swift-tools-version declares the minimum version of Swift required to build this package.

import PackageDescription

let package = Package(
name: "targets",
products: [
.library(
name: "LibraryTarget",
targets: ["LibraryTarget"]
),
.executable(
name: "ExecutableTarget",
targets: ["ExecutableTarget"]
),
.plugin(
name: "PluginTarget",
targets: ["PluginTarget"]
),
],
dependencies: [
.package(url: "https://github.com/swiftlang/swift-markdown.git", branch: "main"),
.package(path: "../defaultPackage"),
],
targets: [
.target(
name: "LibraryTarget"
),
.executableTarget(
name: "ExecutableTarget"
),
.plugin(
name: "PluginTarget",
capability: .command(
intent: .custom(verb: "testing", description: "A plugin for testing plugins")
)
),
.testTarget(
name: "TargetsTests",
dependencies: ["LibraryTarget"]
),
.testTarget(
name: "AnotherTests",
dependencies: ["LibraryTarget"]
),
]
)
9 changes: 9 additions & 0 deletions assets/test/targets/Plugins/PluginTarget/main.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import PackagePlugin
import Foundation

@main
struct MyCommandPlugin: CommandPlugin {
func performCommand(context: PluginContext, arguments: [String]) throws {
print("Plugin Target Hello World")
}
}
1 change: 1 addition & 0 deletions assets/test/targets/Snippets/AnotherSnippet.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
print("Another Snippet Hello World")
1 change: 1 addition & 0 deletions assets/test/targets/Snippets/Snippet.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
print("Snippet Hello World")
1 change: 1 addition & 0 deletions assets/test/targets/Sources/ExecutableTarget/main.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
print("Executable Target Hello World!")
9 changes: 9 additions & 0 deletions assets/test/targets/Sources/LibraryTarget/Targets.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
// The Swift Programming Language
// https://docs.swift.org/swift-book

public func foo() {
print("foo")
}
public func bar() {
print("bar")
}
8 changes: 8 additions & 0 deletions assets/test/targets/Tests/AnotherTests/AnotherTests.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import LibraryTarget
import XCTest

class AnotherTests: XCTestCase {
func testExample() {
bar()
}
}
8 changes: 8 additions & 0 deletions assets/test/targets/Tests/TargetsTests/TargetsTests.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import LibraryTarget
import XCTest

class TargetsTests: XCTestCase {
func testExample() {
foo()
}
}
105 changes: 89 additions & 16 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -222,12 +222,14 @@
{
"command": "swift.runSnippet",
"title": "Run Swift Snippet",
"category": "Swift"
"category": "Swift",
"icon": "$(play)"
},
{
"command": "swift.debugSnippet",
"title": "Debug Swift Snippet",
"category": "Swift"
"category": "Swift",
"icon": "$(debug)"
},
{
"command": "swift.runPluginTask",
Expand Down Expand Up @@ -266,8 +268,27 @@
},
{
"command": "swift.runAllTestsParallel",
"title": "Run All Tests in Parallel",
"category": "Test"
"title": "Run Tests in Parallel",
"category": "Test",
"icon": "$(testing-run-all-icon)"
},
{
"command": "swift.runAllTests",
"title": "Run Tests",
"category": "Test",
"icon": "$(testing-run-icon)"
},
{
"command": "swift.debugAllTests",
"title": "Debug Tests",
"category": "Test",
"icon": "$(testing-debug-icon)"
},
{
"command": "swift.coverAllTests",
"title": "Run Tests with Coverage",
"category": "Test",
"icon": "$(debug-coverage)"
}
],
"configuration": [
Expand Down Expand Up @@ -910,6 +931,18 @@
{
"command": "swift.runAllTestsParallel",
"when": "swift.isActivated"
},
{
"command": "swift.runAllTests",
"when": "swift.isActivated"
},
{
"command": "swift.debugAllTests",
"when": "swift.isActivated"
},
{
"command": "swift.coverAllTests",
"when": "swift.isActivated"
}
],
"editor/context": [
Expand Down Expand Up @@ -971,50 +1004,90 @@
"view/title": [
{
"command": "swift.updateDependencies",
"when": "view == packageDependencies",
"when": "view == projectPanel",
"group": "navigation@1"
},
{
"command": "swift.resolveDependencies",
"when": "view == packageDependencies",
"when": "view == projectPanel",
"group": "navigation@2"
},
{
"command": "swift.resetPackage",
"when": "view == packageDependencies",
"when": "view == projectPanel",
"group": "navigation@3"
},
{
"command": "swift.flatDependenciesList",
"when": "view == packageDependencies && !swift.flatDependenciesList",
"when": "view == projectPanel && !swift.flatDependenciesList",
"group": "navigation@4"
},
{
"command": "swift.nestedDependenciesList",
"when": "view == packageDependencies && swift.flatDependenciesList",
"when": "view == projectPanel && swift.flatDependenciesList",
"group": "navigation@5"
}
],
"view/item/context": [
{
"command": "swift.useLocalDependency",
"when": "view == packageDependencies && viewItem == remote"
"when": "view == projectPanel && viewItem == remote"
},
{
"command": "swift.uneditDependency",
"when": "view == packageDependencies && viewItem == editing"
"when": "view == projectPanel && viewItem == editing"
},
{
"command": "swift.openInWorkspace",
"when": "view == packageDependencies && viewItem == editing"
"when": "view == projectPanel && viewItem == editing"
},
{
"command": "swift.openInWorkspace",
"when": "view == packageDependencies && viewItem == local"
"when": "view == projectPanel && viewItem == local"
},
{
"command": "swift.openExternal",
"when": "view == packageDependencies && viewItem != local"
"when": "view == projectPanel && (viewItem == 'editing' || viewItem == 'remote')"
},
{
"command": "swift.run",
"when": "view == projectPanel && viewItem == 'runnable'",
"group": "inline@0"
},
{
"command": "swift.debug",
"when": "view == projectPanel && viewItem == 'runnable'",
"group": "inline@1"
},
{
"command": "swift.runSnippet",
"when": "view == projectPanel && viewItem == 'snippet_runnable'",
"group": "inline@0"
},
{
"command": "swift.debugSnippet",
"when": "view == projectPanel && viewItem == 'snippet_runnable'",
"group": "inline@1"
},
{
"command": "swift.runAllTests",
"when": "view == projectPanel && viewItem == 'test_runnable'",
"group": "inline@0"
},
{
"command": "swift.debugAllTests",
"when": "view == projectPanel && viewItem == 'test_runnable'",
"group": "inline@1"
},
{
"command": "swift.runAllTestsParallel",
"when": "view == projectPanel && viewItem == 'test_runnable'",
"group": "inline@2"
},
{
"command": "swift.coverAllTests",
"when": "view == projectPanel && viewItem == 'test_runnable'",
"group": "inline@3"
}
]
},
Expand Down Expand Up @@ -1211,8 +1284,8 @@
"views": {
"explorer": [
{
"id": "packageDependencies",
"name": "Package Dependencies",
"id": "projectPanel",
"name": "Swift Project",
"icon": "$(archive)",
"when": "swift.hasPackage"
}
Expand Down
12 changes: 12 additions & 0 deletions src/PackageWatcher.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ export class PackageWatcher {
private packageFileWatcher?: vscode.FileSystemWatcher;
private resolvedFileWatcher?: vscode.FileSystemWatcher;
private workspaceStateFileWatcher?: vscode.FileSystemWatcher;
private snippetWatcher?: vscode.FileSystemWatcher;

constructor(
private folderContext: FolderContext,
Expand All @@ -41,6 +42,7 @@ export class PackageWatcher {
this.packageFileWatcher = this.createPackageFileWatcher();
this.resolvedFileWatcher = this.createResolvedFileWatcher();
this.workspaceStateFileWatcher = this.createWorkspaceStateFileWatcher();
this.snippetWatcher = this.createSnippetFileWatcher();
}

/**
Expand All @@ -51,6 +53,7 @@ export class PackageWatcher {
this.packageFileWatcher?.dispose();
this.resolvedFileWatcher?.dispose();
this.workspaceStateFileWatcher?.dispose();
this.snippetWatcher?.dispose();
}

private createPackageFileWatcher(): vscode.FileSystemWatcher {
Expand Down Expand Up @@ -87,6 +90,15 @@ export class PackageWatcher {
return watcher;
}

private createSnippetFileWatcher(): vscode.FileSystemWatcher {
const watcher = vscode.workspace.createFileSystemWatcher(
new vscode.RelativePattern(this.folderContext.folder, "Snippets/*.swift")
);
watcher.onDidCreate(async () => await this.handlePackageSwiftChange());
watcher.onDidDelete(async () => await this.handlePackageSwiftChange());
return watcher;
}

/**
* Handles a create or change event for **Package.swift**.
*
Expand Down
2 changes: 1 addition & 1 deletion src/SwiftPackage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ export interface Target {
c99name: string;
path: string;
sources: string[];
type: "executable" | "test" | "library" | "snippet";
type: "executable" | "test" | "library" | "snippet" | "plugin";
}

/** Swift Package Manager dependency */
Expand Down
Loading