1 /** 2 * Give import hints for common symbol names that couldn't be resolved. 3 * 4 * For example, prompt to `import std.stdio` when using `writeln`. 5 * 6 * Copyright: Copyright (C) 1999-2023 by The D Language Foundation, All Rights Reserved 7 * Authors: $(LINK2 https://www.digitalmars.com, Walter Bright) 8 * License: $(LINK2 https://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) 9 * Source: $(LINK2 https://github.com/dlang/dmd/blob/master/src/dmd/imphint.d, _imphint.d) 10 * Documentation: https://dlang.org/phobos/dmd_imphint.html 11 * Coverage: https://codecov.io/gh/dlang/dmd/src/master/src/dmd/imphint.d 12 */ 13 14 module dmd.imphint; 15 16 /****************************************** 17 * Looks for undefined identifier s to see 18 * if it might be undefined because an import 19 * was not specified. 20 * Not meant to be a comprehensive list of names in each module, 21 * just the most common ones. 22 */ 23 const(char)[] importHint(const(char)[] s) @safe 24 { 25 if (auto entry = s in hints) 26 return *entry; 27 return null; 28 } 29 30 private immutable string[string] hints; 31 32 shared static this() 33 { 34 // in alphabetic order 35 hints = [ 36 "AliasSeq": "std.meta", 37 "appender": "std.array", 38 "array": "std.array", 39 "calloc": "core.stdc.stdlib", 40 "chdir": "std.file", 41 "cos": "std.math", 42 "dirEntries": "std.file", 43 "drop": "std.range", 44 "each": "std.algorithm", 45 "empty": "std.range", 46 "endsWith": "std.algorithm", 47 "enforce": "std.exception", 48 "enumerate": "std.range", 49 "equal": "std.algorithm", 50 "exists": "std.file", 51 "fabs": "std.math", 52 "filter": "std.algorithm", 53 "format": "std.format", 54 "free": "core.stdc.stdlib", 55 "front": "std.range", 56 "iota": "std.range", 57 "isDir": "std.file", 58 "isFile": "std.file", 59 "join": "std.array", 60 "joiner": "std.algorithm", 61 "malloc": "core.stdc.stdlib", 62 "map": "std.algorithm", 63 "max": "std.algorithm", 64 "min": "std.algorithm", 65 "mkdir": "std.file", 66 "popFront": "std.range", 67 "printf": "core.stdc.stdio", 68 "realloc": "core.stdc.stdlib", 69 "replace": "std.array", 70 "rmdir": "std.file", 71 "sin": "std.math", 72 "sort": "std.algorithm", 73 "split": "std.array", 74 "sqrt": "std.math", 75 "startsWith": "std.algorithm", 76 "take": "std.range", 77 "text": "std.conv", 78 "to": "std.conv", 79 "writefln": "std.stdio", 80 "writeln": "std.stdio", 81 "__va_argsave_t": "core.stdc.stdarg", 82 "__va_list_tag": "core.stdc.stdarg", 83 ]; 84 } 85 86 unittest 87 { 88 assert(importHint("printf") !is null); 89 assert(importHint("fabs") !is null); 90 assert(importHint("xxxxx") is null); 91 }