Skip to content

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
Contributor

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
Contributor

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
Contributor

@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
Contributor

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 <tdhutt@gmail.com>
@bors
Copy link
Contributor

bors bot commented Mar 31, 2020

Timed out

@matklad
Copy link
Contributor

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