June 14, 2017 proposal: reading multiple files with dmd -stdin and allow specifying (fake) file names | ||||
---|---|---|---|---|
| ||||
Proposal: support reading multiple files (with fake file names) from stdin. This is a natural extension of https://issues.dlang.org/show_bug.cgi?id=9287 (Issue 9287 - DMD should read from stdin when an input file is "-") Example use case: * simplify writing bug reports and trying out other peoples's bug reports * simplify writing unittests that depend on multiple files * IDE integration where more than 1 file are desired Proposed syntax: use a delimiter to seperate different modules, with a (fake) file name. ``` cat module_list.txt | dmd -stdin ``` with cat module_list.txt: ``` pragma(module, "bar/foo1.d"); module foo1; void test1(){} pragma(module, "bar/foo2.d"); module foo2; // A module name is required void test2(){} // etc ``` Now when sending a bug report involving multiple files, the user doesn't need to manually re-create the file hierarchy, all he needs is copy paste to the terminal after dmd -stdin, followed by ^D (or just cat module_list.txt | dmd -stdin) The other feature here is introduction of fake file names, which should behave exactly as the real file names except for initially reading them. This'll greatly simplify writing compiler unittests, or writing examples for dub / vibe programs that typically rely on a file hierarchy. This'll also allow documentation unittests involving multiple files. There are probably other use cases based on reading entire packages from a url, etc. Implementation: similar to https://github.com/dlang/dmd/pull/6880 : * read from stdin until EOF, then parse into a map string[string] (module_contents[fakefilename]), then insert a simple interception logic that searches inside this map before searching in the filesystem. |
June 15, 2017 Re: proposal: reading multiple files with dmd -stdin and allow specifying (fake) file names | ||||
---|---|---|---|---|
| ||||
Posted in reply to Timothee Cour | Wouldn't it be better done at the lexer level: it needs to reset line count, see https://issues.dlang.org/show_bug.cgi?id=2660#c13 |
Copyright © 1999-2021 by the D Language Foundation