https://github.com/lance6716/errhell
输入:
package main
func main() {
returnErr().try
}
func returnErr() error {
return nil
}
输出:
package main
func main() {
_err0 := returnErr()
if _err0 != nil {
return
}
}
func returnErr() error {
return nil
}
我是期望完成类似 gofmt 一样的程序,让 IDE 调用从而方便生成 if err != nil {...}
。当然如果 IDE 甚至 go 自己做的话,解析类型系统更好,生成的代码也会更好。
求 PR
1
learningman 2022-02-11 22:02:46 +08:00
没高亮,没补全。。。
而且 codegen 我个人不太喜欢,总感觉是抢编译器的活 |
2
littlewing 2022-02-11 22:05:32 +08:00
要是有类似 C++ 的宏就好了,虽然我写 C++ 的时候也从来不用 exception ,但是因为有宏,写起来不会这么恶心
|
3
lance6716 OP @littlewing 没有宏就自己变换 AST🙃
|
4
lance6716 OP @learningman 应该可以用一个特定的闭包来标记需要处理的函数,就仍然可解析了。但这样写起来太复杂了,还不如自己写 err check
|
5
ysc3839 2022-02-11 23:04:25 +08:00
@littlewing 可以考虑用 C 预处理器处理
输入 ``` #define TRY(expr) _err0 := expr \ if _err0 != nil { \ return \ } package main func main() { TRY(returnErr()) } func returnErr() error { return nil } ``` 输出 ``` package main func main() { _err0 := returnErr() if _err0 != nil { return } } func returnErr() error { return nil } ``` https://godbolt.org/z/qerczhEY9 不过这个方法不能生成换行,不知道是否符合 Golang 的要求 |
6
lance6716 OP @ysc3839 return 需要检查当前函数的返回值有几个、什么类型。可以看一下仓库 readme 里面测试文件链接
@learningman 感觉可以通过注释来识别需要处理的函数,这样的话应该对 IDE 比较友好吧 |
8
aloxaf 2022-02-11 23:24:12 +08:00 1
mark 一下,说不定若干年以后这就是 go++ 的起源(
|
9
cmdOptionKana 2022-02-11 23:55:21 +08:00 1
建议使用 Goland, 输入可以快捷自动补全,显示时可以精简显示,很美观。
|
10
timpaik 2022-02-12 00:15:56 +08:00 via Android
或者和 rust 一样,加个问号向上抛?
|
11
lance6716 OP @cmdOptionKana 怎么配置可以达到这个效果 😂 能省下我好多时间
|
12
cmdOptionKana 2022-02-12 08:09:39 +08:00
@lance6716 就是默认效果,当时我第一次用就服气了,活该 JetBrains 赚钱。
|
13
levinit 2022-02-12 09:28:38 +08:00 via iPhone
@cmdOptionKana goland 岂不是能省很多精力时间
|
14
lance6716 OP @cmdOptionKana 我一直用 goland ,没记得函数调用有这种宏啊,slice 的 aappend 倒是经常用
|
15
cmdOptionKana 2022-02-12 09:54:10 +08:00
@lance6716 不是函数调用,是针对 if err != nil 的 snippet 和简化显示。也就是说,输入很方便,显示也很简洁,err 处理的问题就不存在了呀。
|
16
lance6716 OP @cmdOptionKana 我这个可以处理函数有多个返回值,其中一个是 error ,以及自动填充合法的 return
|
17
buffzty 2022-02-12 16:09:04 +08:00
go 本来就有类似 try catch 的写法 为什么要创造这种无用的东西呢
|