D-Scanner
D-Scanner copied to clipboard
add warnings for known useless / avoidable memory-allocations (especially in phobos)
Known useless extra allocations (can be removed without any downsides):
- [ ]
std.array:array
onSortedRange!(T[])
-> use.release
(avoids allocation) or.dup
(keeps behavior) instead - [ ]
std.array:array
on result ofjoiner
-> usejoin
Known extra allocations that might be there for a reason:
- [ ] any function taking both string and string range - only warning in trivial cases with simple strings as arguments, since other types and ranges may not be evaluatable twice - suggest replacement function (avoids allocation) or use new local
string
variable (keeps behavior)- [ ]
std.path : buildPath
->chainPath
- [ ]
std.utf : toUTF8
->byUTF!char
- [ ]
std.utf : toUTF16
->byUTF!wchar
- [ ]
std.utf : toUTF32
->byUTF!dchar
- [ ]
std.uni : toLower
->asLowerCase
- [ ]
std.uni : toUpper
->asUpperCase
- [ ]
cc @ljmf00 this might actually be something that should be trivial to implement in ldclint, where you could even accurately check for InputRange/ForwardRange and actually also warn on cases that D-Scanner wouldn't easily be able to tell apart and would just leave out to avoid false positives.
Although we are likely still going to implement this in D-Scanner anyway, with its not full accurate, but much less RAM using dsymbol index, while ldclint isn't fully ready to be used yet