Re: Feedback on Átila's Vision for D

Jacob Carlborg doob at me.com
Thu Oct 17 18:18:49 UTC 2019


On 2019-10-16 13:14, Atila Neves wrote:

> What tooling what you like to see developed that doesn't exist now?
> I keep reading online that Go has great tooling, but having used it I 
> don't know what people mean when they say that. Likewise, I read that 
> people want D to have great tooling but I also don't know what they mean 
> then either.

In general the compiler (DMD) needs to be able to be used as a library 
to build various tools on top of it. A great start is to have a full 
working LSP [1] server which uses DMD as a library under the hood. 
Features supported by LSP include:

* Code completion
* Hover (I guess this can show the actual type of an `auto` declaration)
* Signature
* Go to definition
* Find references
* Highlight all references
* Code formatting
* Symbol renaming
* Code folding
* Show documentation for symbol

On top of that there are more advanced refactoring tools:

* Upgrade tool - automatically replace deprecated features and symbols 
with new equivalent

* Modernizer - replaces some language contracts with more modern 
alternatives. Might be combined with the above tool but will not be 
limited to deprecated this. Perhaps replace `in {}` contracts with the 
newer `in()` syntax.

* Code extractor - extract a code snippet to a function/class/struct
* Move a variable to a smaller scope

And other tools:

* Linter

* Compile time lowerer - show how the compiler expands mixins, lowers 
some features to others (i.e. `scope` to `try`/`catch`/`finally`), 
`foreach` to `for` (I assume). This could be implemented as a special 
view in and editor/IDE

* Automatically add attributes to functions

Regarding Go. One huge advantage is that the standard library contains a 
Go frontend [2]. Here is what seems to be the standard Go tools [3]:

* callgraph - a tool for reporting the call graph of a Go program
* eg - The eg command performs example-based refactoring
* goyacc - Goyacc is a version of yacc for Go
* guru - a tool for answering questions about Go source code

* fiximports - The fiximports command fixes import declarations to use 
the canonical import path for packages that have an "import comment" as 
defined by https://golang.org/s/go14customimport

* godex - The godex command prints (dumps) exported information of 
packages or selected package objects

* goimports - Command goimports updates your Go import lines, adding 
missing ones and removing unreferenced ones

* gomvpkg - The gomvpkg command moves go packages, updating import 
declarations

* gopls - The gopls command is an LSP server for Go

* gorename - The gorename command performs precise type-safe renaming of 
identifiers in Go source code

* gotype - The gotype command, like the front-end of a Go compiler, 
parses and type-checks a single Go package

[1] https://microsoft.github.io/language-server-protocol/
[2] https://golang.org/pkg/go/
[3] https://godoc.org/golang.org/x/tools/cmd

-- 
/Jacob Carlborg


More information about the Digitalmars-d mailing list