vscode-js-debug icon indicating copy to clipboard operation
vscode-js-debug copied to clipboard

Prompt for arguments?

Open tomdale opened this issue 8 years ago • 11 comments

I'm working on a large Node project that's made up of several different packages, each one with a suite of tests. I have a launch.json configuration per package to run each test suite individually. But when I'm trying to debug a single failing test, the overhead of running the entire suite can really slow things down.

In those cases, I go in and manually edit the launch.json and add some arguments to the args field to tell Mocha to only run matching tests with the -g option:

"args": ["--opts", "tests/mocha.opts", "-g", "photos should upload and return a 200 response"],

However, this isn't super discoverable for other people on the team. Ideally, I'd like to make a configuration that prompts the user to provide a string that can be passed as the argument.

I really like how ${command.PickProcess} allows me to create a dynamic configuration with a GUI to prompt me for the process to attach to. Is there any way to do something similar for an argument value? If not, can I humbly submit this as a feature request? 😄

tomdale avatar Oct 24 '16 14:10 tomdale

The mock debugger shows how to ask the user for a string/name from a launch config: https://github.com/Microsoft/vscode-mock-debug/blob/master/src/extension.ts#L23 The problem is that you cannot (yet) easily use this approach in a launch config without writing that extension code and introducing a 'variable'. But it is planned to simplify this: https://github.com/Microsoft/vscode/issues/12735

weinand avatar Oct 26 '16 15:10 weinand

Since Microsoft/vscode#12735 has been implemented it is now possible to provide "Prompt for Arguments" functionality as an extension and use it in launch.json and task.json.

weinand avatar Nov 30 '16 15:11 weinand

@weinand Can you give an example of a task (entry of task.json) which uses a prompt to add command arguments?

probert94 avatar Jun 20 '18 09:06 probert94

@weinand Can you ?

VaultDeveloper avatar Feb 04 '20 08:02 VaultDeveloper

Applying what is said in https://code.visualstudio.com/docs/editor/variables-reference#_input-variables to the example from above:

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "run tests",
      "command": "mocha",
      "args": [
         "--opts", "tests/mocha.opts",
         "-g", "'${input:someArgs}'"
       ]
    }
  ],
  "inputs": [
    {
      "id": "someArgs",
      "type": "promptString",
      "description": "enter some arguments"
    }
  ]
}

(I did not verify that this works...)

weinand avatar Feb 04 '20 09:02 weinand

I verified that it works -- https://github.com/Microsoft/vscode-node-debug/issues/108#issuecomment-581815593

You can put an inputs section into launch.json, and reference the defined variables in your launch configurations.

Now I want ONE MORE thing - a way to get the OLD arg behavior allowing a space delimited arg string, because I want one generic configuration to debug any old script, like:

   configuration: [
   {
        // This runs the current file as a script with whatever args are typed 
        "type": "node",
        "request": "launch",
        "name": "Launch script",
        "cwd": "${fileDirname}",
        "program": "${file}",
        "args": "${input:argValues}",      // <== This doesn't work because this must be a list
        "skipFiles": [ "<node_internals>/**" ]
    },

With an input section as above with "id": "argValues"

marvingreenberg avatar May 05 '20 14:05 marvingreenberg

@marvingreenberg your ONE MORE thing is covered by this feature request: https://github.com/microsoft/vscode/issues/83678

weinand avatar May 05 '20 15:05 weinand

Sigh. Closed, due to overthinking. I can think of three approaches that would be fine (allow args to be a list OR a space delimited string - , OR have 'args' and 'argString' (mutually exclusive, and some people would use the string of of convenience in super of imprecision) OR just do the referenced flattening on the lists of lists and just document that input "promptLists" have this behavior, or introduce some weird syntax ${[arglist]} to emphasize the difference)

On Tue, May 5, 2020, 11:31 AM Andre Weinand [email protected] wrote:

@marvingreenberg https://github.com/marvingreenberg your ONE MORE thing is covered by this feature request: microsoft/vscode#83678 https://github.com/microsoft/vscode/issues/83678

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/microsoft/vscode-node-debug/issues/108#issuecomment-624126462, or unsubscribe https://github.com/notifications/unsubscribe-auth/AABU5A45NNSV6WX2XO2MPPTRQAWO3ANCNFSM4CT3NF2Q .

marvingreenberg avatar May 05 '20 17:05 marvingreenberg

@marvingreenberg I just noticed that this issue lives in the "vscode-node-debug" repository and not "vscode", so it does not ask for a generic VS Code solution (which is not feasible for the reasons explained in length in microsoft/vscode#83678).

What you suggest is actually possible in a specific extension: node-debug could support an alternative argString property that takes a command-line-like string and parses it into the array args. This could even take place in the extension outside of the debug adapter.

/cc @connor4312 for js-debug

weinand avatar May 05 '20 20:05 weinand

I don't want to comment too much in what is obviously the wrong place (as my earlier comment was) I apologize - and I see that 83678 is not closed permanently. Oh, but I can't comment Over there. I'm definitely +1 on @weinand suggestion to inject (e.g.) _args for string array - it is creative and provides a good appraoch for differnt uses including inputs: {

marvingreenberg avatar May 05 '20 21:05 marvingreenberg

@marvingreenberg I've unlocked https://github.com/microsoft/vscode/issues/83678

weinand avatar May 05 '20 23:05 weinand