Skip to content
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

Add basic task support #3777

Merged
merged 5 commits into from
Mar 31, 2020
Merged

Add basic task support #3777

merged 5 commits into from
Mar 31, 2020

Conversation

Timmmm
Copy link
Contributor

@Timmmm Timmmm commented Mar 30, 2020

This adds basic support for running cargo build, cargo run, etc.

Fixes #1935

I have tested this and it seems to work. There are two things I'm not sure about:

  1. The workspace folder handling seems wrong - just get the first workspace folder? Is this just a TODO item? I don't know if it is right to lift workspaceFolder up to activate() but I couldn't see another way.
  2. If you manually add an entry to tasks.json like this:
    {
      "type": "cargo",
      "command": "build",
      "problemMatcher": [
        "$rustc"
      ],
      "group": "build"
    }

then VSCode somehow magically knows to run cargo build. The documentation for resolveTask sounds like I should have to implement that for it to work:

 * Resolves a task that has no [`execution`](#Task.execution) set. Tasks are
 * often created from information found in the `tasks.json`-file. Such tasks miss
 * the information on how to execute them and a task provider must fill in
 * the missing information in the `resolveTask`-method.

But then it also says this:

* This method will not be
 * called for tasks returned from the above `provideTasks` method since those
 * tasks are always fully resolved. A valid default implementation for the
 * `resolveTask` method is to return `undefined`.

Either way, it works without implementing it so the only thing I can think is that it is doing some kind of crazy pattern matching of the tasks returned by provideTasks() and the ones found in tasks.json.

This adds basic support for running `cargo build`, `cargo run`, etc.
@edwin0cheng
Copy link
Member

Just curious, do we want to implement these kind of features in server side, such that it could also be used in other editors ?

@matklad
Copy link
Member

matklad commented Mar 31, 2020

Just curious, do we want to implement these kind of features in server side, such that it could also be used in other editors ?

We have Rust Analyzer: Run command, which is a strictly better feature. microsoft/language-server-protocol#944 tracks its addition to the protocol (no one is actively working on that right now)

Copy link
Member

@matklad matklad left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

r=me with a nit fixed!

bors d+

@matklad
Copy link
Member

matklad commented Mar 31, 2020

bors r+

Thanks!

bors bot added a commit that referenced this pull request Mar 31, 2020
3777: Add basic task support r=matklad a=Timmmm

This adds basic support for running `cargo build`, `cargo run`, etc.

Fixes #1935

I have tested this and it seems to work. There are two things I'm not sure about:

1. The workspace folder handling seems wrong - just get the first workspace folder? Is this just a TODO item? I don't know if it is right to lift `workspaceFolder` up to `activate()` but I couldn't see another way.
2. If you manually add an entry to `tasks.json` like this:

```
    {
      "type": "cargo",
      "command": "build",
      "problemMatcher": [
        "$rustc"
      ],
      "group": "build"
    }
```

then VSCode somehow magically knows to run `cargo build`. The documentation for `resolveTask` *sounds* like I should have to implement that for it to work:

```
 * Resolves a task that has no [`execution`](#Task.execution) set. Tasks are
 * often created from information found in the `tasks.json`-file. Such tasks miss
 * the information on how to execute them and a task provider must fill in
 * the missing information in the `resolveTask`-method.
```

But then it also says this:

```
* This method will not be
 * called for tasks returned from the above `provideTasks` method since those
 * tasks are always fully resolved. A valid default implementation for the
 * `resolveTask` method is to return `undefined`.
```

Either way, it works without implementing it so the only thing I can think is that it is doing some kind of crazy pattern matching of the tasks returned by `provideTasks()` and the ones found in `tasks.json`.

Co-authored-by: Tim <[email protected]>
@bors
Copy link
Contributor

bors bot commented Mar 31, 2020

Timed out

@matklad
Copy link
Member

matklad commented Mar 31, 2020

hm,

bors r+

?

@bors
Copy link
Contributor

bors bot commented Mar 31, 2020

@bors bors bot merged commit 668980d into rust-lang:master Mar 31, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Add vscode task provider like rls-vscode
4 participants