-
Notifications
You must be signed in to change notification settings - Fork 647
Debug: add "go run ." support #3096
Description
After changes made in the issue #2085 'Start without debugging' always defaults to the current go file. The rationale behind the change was the following:
Debug: Start without Debugging is the command to use to simply run the current file rather than debugging.
Let's consider the following program.
main. go
package main
func main () {
second()
}
second.go
package main
func second() {
}
If you open main.go in your active editor and Ctrl+F5 you would get 'undefined: second'
If you open second.go in your active editor and Ctrl+F5 you would get 'runtime.main_main·f: function main is undeclared in the main package'
While I agree that cmd should not start debugging I do not see any reasons why I'm unable to 'just run' the program that has several go files. Currently I'm forced to debug, i.e. switch to the debug view, stop at each breakpoint, switch back to the editor when debug is finished, while in 90% of cases I just want to run, check output and continue editing.
The current behaviour is pretty useless. It works only for programs that have only one file with the main in it. This is pretty rare. It would be much more useful to run the whole package ("go run packagename" or "go run .") and not the current file or at least allow to override the current behaviour from launch.json. Currently this is forced in
https://github.com/microsoft/vscode-go/blob/master/src/goDebugConfiguration.ts
debugConfiguration['currentFile'] = activeEditor && activeEditor.document.languageId === 'go' && activeEditor.document.fileName;
and in https://github.com/microsoft/vscode-go/blob/master/src/debugAdapter/goDebug.ts
and there is no way to run the whole package. Let's add an option to allow running the whole package / execute "go run ." or "go run packagename". Take a look at golang/go#22726 for more details about "go run ."
Activity
[-]Debug: start without debugging defaults to current file[/-][+]Debug: add support of "go run ."[/+][-]Debug: add support of "go run ."[/-][+]Debug: add "go run ." support[/+]hyangah commentedon Mar 17, 2020
I think this is a valid feature request. I arrived late so I am missing the original motivation. Currently
go runtakes list of.gofiles, package import path,., or relative path. So accepting them seem more reasonable. What do you think? @ramya-rao-achapati commentedon Mar 18, 2020
Originally Ctrl+F5 started debugging as well. In #2085 they made it to run the file currently opened in editor. I suggest to extend the change made in #2085 and support not only simple the-whole-program-is-one-file case but make Ctrl+F5 more general. Really looking forward to having this.
ramya-rao-a commentedon Mar 23, 2020
How does
go run .behave when there are multiple files in the current folder withmain()function?In #2085, my assumption was that the
go runcommand only worked with files. I would be in favor ofgo run .and use the directory of the current file as cwd if it works as expected in the above case.hyangah commentedon Mar 24, 2020
@ramya-rao-a
go run .fails if there are multiple files withmain()function. That is consistent how the go command andgoplswould behave (i.e. failure).go run something.go [something2.go ...]would be still useful to debug a script-like go program - is it possible to configure the launch behavior or let Ctrl+F5 to ask users to choose the behavior?Use go run . when program points to directory #3096
ramya-rao-a commentedon Mar 24, 2020
That is good to hear.
Without introducing any new settings or configurations, this would involve first identifying that there are such files which we generally avoid doing i.e parsing all files in the current folder which can get expensive
I have pushed a change to respect the folder path passed to the
programattribute. In such cases, we will set the current working directory to the passed in value and usego run .When one doesnt have a launch.json file at all, then the default value has always been the folder the current file belongs to.
Please try out the latest beta version of this extension which has this change and let me know how that goes
ramya-rao-a commentedon Mar 24, 2020
cc @quoctruong
simpleapples commentedon Apr 2, 2020
i think the logic about passing '.' to
go runshould be reconsidered. pls check this issue #3147 .debug: use fileDirname for the default launch configuration
debug: use fileDirname for the default launch configuration
debug: use fileDirname for the default launch configuration (#3174)
ramya-rao-a commentedon Apr 16, 2020
The fix associated with this issue is now available in the latest version of the extension
We will use
go run .by default unless the debug configuration has theprogramattribute pointing a filechapati commentedon Apr 22, 2020
Thank you @ramya-rao-a @hyangah