formulahendry / vscode-code-runner

Code Runner for Visual Studio Code
https://marketplace.visualstudio.com/items?itemName=formulahendry.code-runner
MIT License
2.18k stars 291 forks source link

Suggestion: about temporary file #338

Open Xeonacid opened 6 years ago

Xeonacid commented 6 years ago

Currently, after running selected code in Code Runner, it leaves a temporary file with the name set in code-runner.temporaryFileName in working dir. If we don't need that any more, we have to remove it manually. What about adding a setting about whether the temporary file would be removed automatically after running?

formulahendry commented 6 years ago

Are you running it in terminal? If not in terminal, it should be removed.

Xeonacid commented 6 years ago

@formulahendry Yeah, I'm running it in terminal.

formulahendry commented 6 years ago

OK, for now, you could customize the code-runner.executorMap by yourself.

Xeonacid commented 6 years ago

@formulahendry Could you give an example?

formulahendry commented 6 years ago

Please refer to https://github.com/formulahendry/vscode-code-runner#configuration

Xeonacid commented 6 years ago

@formulahendry I've read this, but sorry for that I have no idea about how to determine whether it's running a temporary file. 😢 Could it read the code-runner.temporaryFileName variable? I would really appreciate it if you could give a little example... BTW, the code-runner.executorMap is separate settings for each language. Does it have any possible to set globally?

formulahendry commented 6 years ago

You could just use $fullFileName or $fileName, e.g. `"python": "python $fullFileName && del $fullFileName". And, currently it is no support to set globally.

Xeonacid commented 6 years ago

@formulahendry Thanks a lot, but... this would make an unconditional removal, whether it's the temporary file created by running selected code or not. TAT

formulahendry commented 6 years ago

Oh... You are right...

formulahendry commented 6 years ago

Or just use something like "python": "python $fullFileName && del tempCodeRunnerFile.py"

Xeonacid commented 6 years ago

@formulahendry Thanks! (To be honest, I've been using in this way before opening this issue :P It would be grateful if you could implement a global setting as mentioned above, and/or make variables like the code-runner.temporaryFileName visiable in the code-runner.executorMap!

filipesilva commented 5 years ago

I was also trying to find a workaround/solution for this situation. I can do && rm tempCodeRunnerFile.js for now though, that's fine enough. But it would be a cool option. Thanks for your work!

filipesilva commented 5 years ago

For those interested, this is how my executorMap looks like for the languages I use:

  "code-runner.executorMap": {
    "javascript": "node $fullFileName && rm -f $dirWithoutTrailingSlash\\\\tempCodeRunnerFile.js",
    "typescript": "ts-node $fullFileName && rm -f $dirWithoutTrailingSlash\\\\tempCodeRunnerFile.cljs",
    "clojure": "lumo $fullFileName && rm -f $dirWithoutTrailingSlash\\\\tempCodeRunnerFile.cljs",
  },

Notes:

It works but there are a few things to keep in mind when doing it manually.

mil1i commented 5 years ago

It is not deleting the temp files for me whether it is run in Output or Terminal. They always persist. Doesn't matter which language either.

In order for them to delete, I must use the mappings like above with a 'rm tempCodeRunnerFile.' command at the end.

tgreen7 commented 5 years ago

also not getting removed for me with or without "Run in Terminal"

cherry-geqi commented 5 years ago

Why not just create those temp files in system temp dir?

filipesilva commented 5 years ago

@cherry-geqi the file system environment often matters even for snippets. Mostly for imports, but sometimes for global definitions.

cherry-geqi commented 5 years ago

As far as I know, many executors accept scripts from stdin. Instead

node /path/to/script.js

We can

node < /path/to/script.js

This will avoid the env issues.

filipesilva commented 5 years ago

That's a great idea!

Xeonacid commented 5 years ago

@cherry-geqi Sounds good, but it's not a robust way...

dadoirie commented 1 year ago

For those interested, this is how my executorMap looks like for the languages I use:

  "code-runner.executorMap": {
    "javascript": "node $fullFileName && rm -f $dirWithoutTrailingSlash\\\\tempCodeRunnerFile.js",
    "typescript": "ts-node $fullFileName && rm -f $dirWithoutTrailingSlash\\\\tempCodeRunnerFile.cljs",
    "clojure": "lumo $fullFileName && rm -f $dirWithoutTrailingSlash\\\\tempCodeRunnerFile.cljs",
  },

Notes:

  • I am on Windows, using GitBash, and running on terminal.
  • the -f flag is needed to prevent rm: cannot remove 'path/here': No such file or directory when running the real file (without a selection).
  • using $dirWithoutTrailingSlash is needed because the path is surrounded by quotes and the final slash on windows will escape the quote.
  • double escaped slashes (\\\\) are needed otherwise it will end up as \tempCodeRunnerFile, and \t means escape t.
  • will not delete the file if code execution fails.

It works but there are a few things to keep in mind when doing it manually.

I know it's a bit late, but since this issue is still open ... this isn't working for me - also windows btw Remove-Item: Parameter cannot be processed because the parameter name 'f' is ambiguous. Possible matches include: -Filter -Force.

therefore tinkered a bit around and made this work: "javascript": "clear && node $fullFileName && rm $fullFileName" using clear because getting PS C:\Projects\vscodium\time table> node "c:\Projects\vscodium\time table\public\js\tempCodeRunnerFile.js" ; if ($?) { rm "c:\Projects\vscodium\time table\public\js\tempCodeRunnerFile.js" } before the output - haven't yet figured out how to remove this, but clear does the job - would be nice tho having an another solution - so I can scroll and check the previous outputs

AMMullan commented 1 year ago

Amazing that not more people are complaining about this - I had no idea what was generating these files and finally Googled the filename. There should definitely be an option to delete the temporary file if running via a console - temporary files are just that so why keep them after executing?

DigDogData commented 1 year ago

Following up on filipesilva's answer above, anyone facing this issue on linux and running on terminal may try this:


  "code-runner.executorMap": {
    "javascript": "node $fullFileName && rm -f $dirWithoutTrailingSlash\ttempCodeRunnerFile.js",
    "python": "python $fullFileName && rm -f $dirWithoutTrailingSlash\ttempCodeRunnerFile.py",
    "typescript": "ts-node $fullFileName && rm -f $dirWithoutTrailingSlash\ttempCodeRunnerFile.cljs",
    "clojure": "lumo $fullFileName && rm -f $dirWithoutTrailingSlash\ttempCodeRunnerFile.cljs",
  },
ericchase commented 3 months ago

sorry to necro, but i didn't like the above solutions, so i forked the project and changed a few lines to allow entire paths for the Temporary File Name setting, and also removed the quotes from all customized parameters

if anyone is interested: https://github.com/ericchase/fork--vscode-code-runner