mirror of
https://github.com/dlang/phobos.git
synced 2025-04-26 13:10:35 +03:00
Fix D-Scanner linting issues (#9070)
* Fix UndocumentedDeclarationCheck linting issue * Fix IfConstraintsIndentCheck linting issue * Address feedback * Fix publictests CI * Fix old (libdparse) D-Scanner linting warn
This commit is contained in:
parent
fec5e7e4b9
commit
231ae8b68a
44 changed files with 498 additions and 414 deletions
|
@ -443,7 +443,8 @@ if (fun.length >= 1)
|
|||
A range with each fun applied to all the elements. If there is more than one
|
||||
fun, the element type will be `Tuple` containing one element for each fun.
|
||||
*/
|
||||
auto map(Range)(Range r) if (isInputRange!(Unqual!Range))
|
||||
auto map(Range)(Range r)
|
||||
if (isInputRange!(Unqual!Range))
|
||||
{
|
||||
import std.meta : AliasSeq, staticMap;
|
||||
|
||||
|
@ -1308,7 +1309,8 @@ if (is(typeof(unaryFun!predicate)))
|
|||
A range containing only elements `x` in `range` for
|
||||
which `predicate(x)` returns `true`.
|
||||
*/
|
||||
auto filter(Range)(Range range) if (isInputRange!(Unqual!Range))
|
||||
auto filter(Range)(Range range)
|
||||
if (isInputRange!(Unqual!Range))
|
||||
{
|
||||
return FilterResult!(unaryFun!predicate, Range)(range);
|
||||
}
|
||||
|
@ -1545,7 +1547,8 @@ template filterBidirectional(alias pred)
|
|||
Returns:
|
||||
A range containing only the elements in `r` for which `pred` returns `true`.
|
||||
*/
|
||||
auto filterBidirectional(Range)(Range r) if (isBidirectionalRange!(Unqual!Range))
|
||||
auto filterBidirectional(Range)(Range r)
|
||||
if (isBidirectionalRange!(Unqual!Range))
|
||||
{
|
||||
return FilterBidiResult!(unaryFun!pred, Range)(r);
|
||||
}
|
||||
|
|
|
@ -3701,7 +3701,8 @@ if (isDynamicArray!A)
|
|||
* Params:
|
||||
* item = the single item to append
|
||||
*/
|
||||
void put(U)(U item) if (canPutItem!U)
|
||||
void put(U)(U item)
|
||||
if (canPutItem!U)
|
||||
{
|
||||
static if (isSomeChar!T && isSomeChar!U && T.sizeof < U.sizeof)
|
||||
{
|
||||
|
@ -3730,7 +3731,8 @@ if (isDynamicArray!A)
|
|||
}
|
||||
|
||||
// Const fixing hack.
|
||||
void put(Range)(Range items) if (canPutConstRange!Range)
|
||||
void put(Range)(Range items)
|
||||
if (canPutConstRange!Range)
|
||||
{
|
||||
alias p = put!(Unqual!Range);
|
||||
p(items);
|
||||
|
@ -3743,7 +3745,8 @@ if (isDynamicArray!A)
|
|||
* Params:
|
||||
* items = the range of items to append
|
||||
*/
|
||||
void put(Range)(Range items) if (canPutRange!Range)
|
||||
void put(Range)(Range items)
|
||||
if (canPutRange!Range)
|
||||
{
|
||||
// note, we disable this branch for appending one type of char to
|
||||
// another because we can't trust the length portion.
|
||||
|
|
39
std/base64.d
39
std/base64.d
|
@ -299,7 +299,8 @@ template Base64Impl(char Map62th, char Map63th, char Padding = '=')
|
|||
/**
|
||||
* ditto
|
||||
*/
|
||||
char[] encode(R1, R2)(R1 source, R2 buffer) if (!isArray!R1 && isInputRange!R1 &&
|
||||
char[] encode(R1, R2)(R1 source, R2 buffer)
|
||||
if (!isArray!R1 && isInputRange!R1 &&
|
||||
is(ElementType!R1 : ubyte) && hasLength!R1 &&
|
||||
is(R2 == char[]))
|
||||
in
|
||||
|
@ -559,7 +560,8 @@ template Base64Impl(char Map62th, char Map63th, char Padding = '=')
|
|||
* A newly-allocated `char[]` buffer containing the encoded string.
|
||||
*/
|
||||
@safe
|
||||
pure char[] encode(Range)(Range source) if (isArray!Range && is(ElementType!Range : ubyte))
|
||||
pure char[] encode(Range)(Range source)
|
||||
if (isArray!Range && is(ElementType!Range : ubyte))
|
||||
{
|
||||
return encode(source, new char[encodeLength(source.length)]);
|
||||
}
|
||||
|
@ -575,7 +577,8 @@ template Base64Impl(char Map62th, char Map63th, char Padding = '=')
|
|||
/**
|
||||
* ditto
|
||||
*/
|
||||
char[] encode(Range)(Range source) if (!isArray!Range && isInputRange!Range &&
|
||||
char[] encode(Range)(Range source)
|
||||
if (!isArray!Range && isInputRange!Range &&
|
||||
is(ElementType!Range : ubyte) && hasLength!Range)
|
||||
{
|
||||
return encode(source, new char[encodeLength(source.length)]);
|
||||
|
@ -592,7 +595,8 @@ template Base64Impl(char Map62th, char Map63th, char Padding = '=')
|
|||
* Note: This struct is not intended to be created in user code directly;
|
||||
* use the $(LREF encoder) function instead.
|
||||
*/
|
||||
struct Encoder(Range) if (isInputRange!Range && (is(ElementType!Range : const(ubyte)[]) ||
|
||||
struct Encoder(Range)
|
||||
if (isInputRange!Range && (is(ElementType!Range : const(ubyte)[]) ||
|
||||
is(ElementType!Range : const(char)[])))
|
||||
{
|
||||
private:
|
||||
|
@ -702,7 +706,8 @@ template Base64Impl(char Map62th, char Map63th, char Padding = '=')
|
|||
* Note: This struct is not intended to be created in user code directly;
|
||||
* use the $(LREF encoder) function instead.
|
||||
*/
|
||||
struct Encoder(Range) if (isInputRange!Range && is(ElementType!Range : ubyte))
|
||||
struct Encoder(Range)
|
||||
if (isInputRange!Range && is(ElementType!Range : ubyte))
|
||||
{
|
||||
private:
|
||||
Range range_;
|
||||
|
@ -884,7 +889,8 @@ template Base64Impl(char Map62th, char Map63th, char Padding = '=')
|
|||
* }
|
||||
* -----
|
||||
*/
|
||||
Encoder!(Range) encoder(Range)(Range range) if (isInputRange!Range)
|
||||
Encoder!(Range) encoder(Range)(Range range)
|
||||
if (isInputRange!Range)
|
||||
{
|
||||
return typeof(return)(range);
|
||||
}
|
||||
|
@ -981,7 +987,8 @@ template Base64Impl(char Map62th, char Map63th, char Padding = '=')
|
|||
* base alphabet of the current Base64 encoding scheme.
|
||||
*/
|
||||
@trusted
|
||||
pure ubyte[] decode(R1, R2)(in R1 source, return scope R2 buffer) if (isArray!R1 && is(ElementType!R1 : dchar) &&
|
||||
pure ubyte[] decode(R1, R2)(in R1 source, return scope R2 buffer)
|
||||
if (isArray!R1 && is(ElementType!R1 : dchar) &&
|
||||
is(R2 == ubyte[]) && isOutputRange!(R2, ubyte))
|
||||
in
|
||||
{
|
||||
|
@ -1065,7 +1072,8 @@ template Base64Impl(char Map62th, char Map63th, char Padding = '=')
|
|||
/**
|
||||
* ditto
|
||||
*/
|
||||
ubyte[] decode(R1, R2)(R1 source, R2 buffer) if (!isArray!R1 && isInputRange!R1 &&
|
||||
ubyte[] decode(R1, R2)(R1 source, R2 buffer)
|
||||
if (!isArray!R1 && isInputRange!R1 &&
|
||||
is(ElementType!R1 : dchar) && hasLength!R1 &&
|
||||
is(R2 == ubyte[]) && isOutputRange!(R2, ubyte))
|
||||
in
|
||||
|
@ -1334,7 +1342,8 @@ template Base64Impl(char Map62th, char Map63th, char Padding = '=')
|
|||
* A newly-allocated `ubyte[]` buffer containing the decoded string.
|
||||
*/
|
||||
@safe
|
||||
pure ubyte[] decode(Range)(Range source) if (isArray!Range && is(ElementType!Range : dchar))
|
||||
pure ubyte[] decode(Range)(Range source)
|
||||
if (isArray!Range && is(ElementType!Range : dchar))
|
||||
{
|
||||
return decode(source, new ubyte[decodeLength(source.length)]);
|
||||
}
|
||||
|
@ -1350,7 +1359,8 @@ template Base64Impl(char Map62th, char Map63th, char Padding = '=')
|
|||
/**
|
||||
* ditto
|
||||
*/
|
||||
ubyte[] decode(Range)(Range source) if (!isArray!Range && isInputRange!Range &&
|
||||
ubyte[] decode(Range)(Range source)
|
||||
if (!isArray!Range && isInputRange!Range &&
|
||||
is(ElementType!Range : dchar) && hasLength!Range)
|
||||
{
|
||||
return decode(source, new ubyte[decodeLength(source.length)]);
|
||||
|
@ -1367,7 +1377,8 @@ template Base64Impl(char Map62th, char Map63th, char Padding = '=')
|
|||
* Note: This struct is not intended to be created in user code directly;
|
||||
* use the $(LREF decoder) function instead.
|
||||
*/
|
||||
struct Decoder(Range) if (isInputRange!Range && (is(ElementType!Range : const(char)[]) ||
|
||||
struct Decoder(Range)
|
||||
if (isInputRange!Range && (is(ElementType!Range : const(char)[]) ||
|
||||
is(ElementType!Range : const(ubyte)[])))
|
||||
{
|
||||
private:
|
||||
|
@ -1492,7 +1503,8 @@ template Base64Impl(char Map62th, char Map63th, char Padding = '=')
|
|||
* Note: This struct is not intended to be created in user code directly;
|
||||
* use the $(LREF decoder) function instead.
|
||||
*/
|
||||
struct Decoder(Range) if (isInputRange!Range && is(ElementType!Range : char))
|
||||
struct Decoder(Range)
|
||||
if (isInputRange!Range && is(ElementType!Range : char))
|
||||
{
|
||||
private:
|
||||
Range range_;
|
||||
|
@ -1683,7 +1695,8 @@ template Base64Impl(char Map62th, char Map63th, char Padding = '=')
|
|||
* }
|
||||
* -----
|
||||
*/
|
||||
Decoder!(Range) decoder(Range)(Range range) if (isInputRange!Range)
|
||||
Decoder!(Range) decoder(Range)(Range range)
|
||||
if (isInputRange!Range)
|
||||
{
|
||||
return typeof(return)(range);
|
||||
}
|
||||
|
|
44
std/bigint.d
44
std/bigint.d
|
@ -63,8 +63,8 @@ public:
|
|||
* Throws:
|
||||
* $(REF ConvException, std,conv) if the string doesn't represent a valid number
|
||||
*/
|
||||
this(Range)(Range s) if (
|
||||
isBidirectionalRange!Range &&
|
||||
this(Range)(Range s)
|
||||
if (isBidirectionalRange!Range &&
|
||||
isSomeChar!(ElementType!Range) &&
|
||||
!isInfinite!Range &&
|
||||
!isNarrowString!Range)
|
||||
|
@ -160,8 +160,8 @@ public:
|
|||
* (ignored when magnitude is zero)
|
||||
* magnitude = a finite range of unsigned integers
|
||||
*/
|
||||
this(Range)(bool isNegative, Range magnitude) if (
|
||||
isInputRange!Range &&
|
||||
this(Range)(bool isNegative, Range magnitude)
|
||||
if (isInputRange!Range &&
|
||||
isUnsigned!(ElementType!Range) &&
|
||||
(hasLength!Range || isForwardRange!Range) &&
|
||||
!isInfinite!Range)
|
||||
|
@ -181,7 +181,8 @@ public:
|
|||
}
|
||||
|
||||
/// Construct a `BigInt` from a built-in integral type.
|
||||
this(T)(T x) pure nothrow @safe if (isIntegral!T)
|
||||
this(T)(T x) pure nothrow @safe
|
||||
if (isIntegral!T)
|
||||
{
|
||||
data = data.init; // @@@: Workaround for compiler bug
|
||||
opAssign(x);
|
||||
|
@ -196,7 +197,8 @@ public:
|
|||
}
|
||||
|
||||
/// Construct a `BigInt` from another `BigInt`.
|
||||
this(T)(T x) pure nothrow @safe if (is(immutable T == immutable BigInt))
|
||||
this(T)(T x) pure nothrow @safe
|
||||
if (is(immutable T == immutable BigInt))
|
||||
{
|
||||
opAssign(x);
|
||||
}
|
||||
|
@ -210,7 +212,8 @@ public:
|
|||
}
|
||||
|
||||
/// Assignment from built-in integer types.
|
||||
BigInt opAssign(T)(T x) pure nothrow @safe if (isIntegral!T)
|
||||
BigInt opAssign(T)(T x) pure nothrow @safe
|
||||
if (isIntegral!T)
|
||||
{
|
||||
data = cast(ulong) absUnsign(x);
|
||||
sign = (x < 0);
|
||||
|
@ -436,8 +439,7 @@ public:
|
|||
* Implements assignment operators of the form `BigInt op= BigInt`.
|
||||
*/
|
||||
BigInt opOpAssign(string op, T)(T y) pure nothrow @safe return scope
|
||||
if ((op=="+" || op== "-" || op=="*" || op=="|" || op=="&" || op=="^" || op=="/" || op=="%")
|
||||
&& is (T: BigInt))
|
||||
if ((op=="+" || op== "-" || op=="*" || op=="|" || op=="&" || op=="^" || op=="/" || op=="%") && is (T: BigInt))
|
||||
{
|
||||
static if (op == "+")
|
||||
{
|
||||
|
@ -495,8 +497,7 @@ public:
|
|||
*/
|
||||
BigInt opBinary(string op, T)(T y) pure nothrow @safe const return scope
|
||||
if ((op=="+" || op == "*" || op=="-" || op=="|" || op=="&" || op=="^" ||
|
||||
op=="/" || op=="%")
|
||||
&& is (T: BigInt))
|
||||
op=="/" || op=="%") && is (T: BigInt))
|
||||
{
|
||||
BigInt r = this;
|
||||
return r.opOpAssign!(op)(y);
|
||||
|
@ -669,7 +670,8 @@ public:
|
|||
/**
|
||||
Implements `BigInt` unary operators.
|
||||
*/
|
||||
BigInt opUnary(string op)() pure nothrow @safe const if (op=="+" || op=="-" || op=="~")
|
||||
BigInt opUnary(string op)() pure nothrow @safe const
|
||||
if (op=="+" || op=="-" || op=="~")
|
||||
{
|
||||
static if (op=="-")
|
||||
{
|
||||
|
@ -687,7 +689,8 @@ public:
|
|||
|
||||
// non-const unary operations
|
||||
/// ditto
|
||||
BigInt opUnary(string op)() pure nothrow @safe if (op=="++" || op=="--")
|
||||
BigInt opUnary(string op)() pure nothrow @safe
|
||||
if (op=="++" || op=="--")
|
||||
{
|
||||
static if (op=="++")
|
||||
{
|
||||
|
@ -721,7 +724,8 @@ public:
|
|||
}
|
||||
|
||||
/// ditto
|
||||
bool opEquals(T)(const T y) const pure nothrow @nogc @safe if (isIntegral!T)
|
||||
bool opEquals(T)(const T y) const pure nothrow @nogc @safe
|
||||
if (isIntegral!T)
|
||||
{
|
||||
if (sign != (y<0))
|
||||
return 0;
|
||||
|
@ -729,7 +733,8 @@ public:
|
|||
}
|
||||
|
||||
/// ditto
|
||||
bool opEquals(T)(const T y) const pure nothrow @nogc if (isFloatingPoint!T)
|
||||
bool opEquals(T)(const T y) const pure nothrow @nogc
|
||||
if (isFloatingPoint!T)
|
||||
{
|
||||
return 0 == opCmp(y);
|
||||
}
|
||||
|
@ -896,7 +901,8 @@ public:
|
|||
/**
|
||||
Implements casting to floating point types.
|
||||
*/
|
||||
T opCast(T)() @safe nothrow @nogc const if (isFloatingPoint!T)
|
||||
T opCast(T)() @safe nothrow @nogc const
|
||||
if (isFloatingPoint!T)
|
||||
{
|
||||
return toFloat!(T, "nearest");
|
||||
}
|
||||
|
@ -1090,7 +1096,8 @@ public:
|
|||
}
|
||||
|
||||
/// ditto
|
||||
int opCmp(T)(const T y) pure nothrow @nogc @safe const if (isIntegral!T)
|
||||
int opCmp(T)(const T y) pure nothrow @nogc @safe const
|
||||
if (isIntegral!T)
|
||||
{
|
||||
if (sign != (y<0) )
|
||||
return sign ? -1 : 1;
|
||||
|
@ -1098,7 +1105,8 @@ public:
|
|||
return sign? -cmp: cmp;
|
||||
}
|
||||
/// ditto
|
||||
int opCmp(T)(const T y) nothrow @nogc @safe const if (isFloatingPoint!T)
|
||||
int opCmp(T)(const T y) nothrow @nogc @safe const
|
||||
if (isFloatingPoint!T)
|
||||
{
|
||||
import core.bitop : bsr;
|
||||
import std.math.operations : cmp;
|
||||
|
|
|
@ -3362,12 +3362,14 @@ version (StdUnittest) private struct CountOverflows
|
|||
static struct Hook1
|
||||
{
|
||||
uint calls;
|
||||
auto hookOpUnary(string op, T)(T value) if (op == "-")
|
||||
auto hookOpUnary(string op, T)(T value)
|
||||
if (op == "-")
|
||||
{
|
||||
++calls;
|
||||
return T(42);
|
||||
}
|
||||
auto hookOpUnary(string op, T)(T value) if (op == "~")
|
||||
auto hookOpUnary(string op, T)(T value)
|
||||
if (op == "~")
|
||||
{
|
||||
++calls;
|
||||
return T(43);
|
||||
|
@ -3383,12 +3385,14 @@ version (StdUnittest) private struct CountOverflows
|
|||
static struct Hook2
|
||||
{
|
||||
uint calls;
|
||||
void hookOpUnary(string op, T)(ref T value) if (op == "++")
|
||||
void hookOpUnary(string op, T)(ref T value)
|
||||
if (op == "++")
|
||||
{
|
||||
++calls;
|
||||
--value;
|
||||
}
|
||||
void hookOpUnary(string op, T)(ref T value) if (op == "--")
|
||||
void hookOpUnary(string op, T)(ref T value)
|
||||
if (op == "--")
|
||||
{
|
||||
++calls;
|
||||
++value;
|
||||
|
|
|
@ -163,7 +163,8 @@ private
|
|||
MsgType type;
|
||||
Variant data;
|
||||
|
||||
this(T...)(MsgType t, T vals) if (T.length > 0)
|
||||
this(T...)(MsgType t, T vals)
|
||||
if (T.length > 0)
|
||||
{
|
||||
static if (T.length == 1)
|
||||
{
|
||||
|
|
|
@ -245,7 +245,8 @@ struct DList(T)
|
|||
/**
|
||||
Constructor taking a number of nodes
|
||||
*/
|
||||
this(U)(U[] values...) if (isImplicitlyConvertible!(U, T))
|
||||
this(U)(U[] values...)
|
||||
if (isImplicitlyConvertible!(U, T))
|
||||
{
|
||||
insertBack(values);
|
||||
}
|
||||
|
|
|
@ -801,7 +801,8 @@ Indexing operators yield or modify the value at a specified index.
|
|||
/**
|
||||
$(D k in container) returns true if the given key is in the container.
|
||||
*/
|
||||
bool opBinaryRight(string op)(KeyType k) if (op == "in")
|
||||
bool opBinaryRight(string op)(KeyType k)
|
||||
if (op == "in")
|
||||
{
|
||||
assert(0, "Not implemented");
|
||||
}
|
||||
|
@ -843,13 +844,15 @@ define `opBinary`.
|
|||
Complexity: $(BIGOH n + m), where m is the number of elements in $(D
|
||||
stuff)
|
||||
*/
|
||||
TotalContainer opBinary(string op)(Stuff rhs) if (op == "~")
|
||||
TotalContainer opBinary(string op)(Stuff rhs)
|
||||
if (op == "~")
|
||||
{
|
||||
assert(0, "Not implemented");
|
||||
}
|
||||
|
||||
/// ditto
|
||||
TotalContainer opBinaryRight(string op)(Stuff lhs) if (op == "~")
|
||||
TotalContainer opBinaryRight(string op)(Stuff lhs)
|
||||
if (op == "~")
|
||||
{
|
||||
assert(0, "Not implemented");
|
||||
}
|
||||
|
@ -857,7 +860,8 @@ stuff)
|
|||
/**
|
||||
Forwards to $(D insertAfter(this[], stuff)).
|
||||
*/
|
||||
void opOpAssign(string op)(Stuff stuff) if (op == "~")
|
||||
void opOpAssign(string op)(Stuff stuff)
|
||||
if (op == "~")
|
||||
{
|
||||
assert(0, "Not implemented");
|
||||
}
|
||||
|
|
|
@ -1057,7 +1057,8 @@ if (is(typeof(binaryFun!less(T.init, T.init))))
|
|||
|
||||
Complexity: $(BIGOH log(n))
|
||||
+/
|
||||
bool opBinaryRight(string op)(Elem e) const if (op == "in")
|
||||
bool opBinaryRight(string op)(Elem e) const
|
||||
if (op == "in")
|
||||
{
|
||||
return _find(e) !is null;
|
||||
}
|
||||
|
@ -1261,7 +1262,8 @@ if (is(typeof(binaryFun!less(T.init, T.init))))
|
|||
*
|
||||
* Complexity: $(BIGOH log(n))
|
||||
*/
|
||||
size_t stableInsert(Stuff)(Stuff stuff) if (isImplicitlyConvertible!(Stuff, Elem))
|
||||
size_t stableInsert(Stuff)(Stuff stuff)
|
||||
if (isImplicitlyConvertible!(Stuff, Elem))
|
||||
{
|
||||
static if (allowDuplicates)
|
||||
{
|
||||
|
@ -1873,7 +1875,8 @@ assert(equal(rbt[], [5]));
|
|||
/**
|
||||
* Constructor. Pass in a range of elements to initialize the tree with.
|
||||
*/
|
||||
this(Stuff)(Stuff stuff) if (isInputRange!Stuff && isImplicitlyConvertible!(ElementType!Stuff, Elem))
|
||||
this(Stuff)(Stuff stuff)
|
||||
if (isInputRange!Stuff && isImplicitlyConvertible!(ElementType!Stuff, Elem))
|
||||
{
|
||||
_setup();
|
||||
stableInsert(stuff);
|
||||
|
|
|
@ -182,7 +182,8 @@ if (!is(T == shared))
|
|||
/**
|
||||
Constructor taking a number of nodes
|
||||
*/
|
||||
this(U)(U[] values...) if (isImplicitlyConvertible!(U, T))
|
||||
this(U)(U[] values...)
|
||||
if (isImplicitlyConvertible!(U, T))
|
||||
{
|
||||
insertFront(values);
|
||||
}
|
||||
|
|
|
@ -1935,7 +1935,8 @@ template hasToString(T, Char)
|
|||
static struct G
|
||||
{
|
||||
string toString() {return "";}
|
||||
void toString(Writer)(ref Writer w) if (isOutputRange!(Writer, string)) {}
|
||||
void toString(Writer)(ref Writer w)
|
||||
if (isOutputRange!(Writer, string)) {}
|
||||
}
|
||||
static struct H
|
||||
{
|
||||
|
@ -1946,7 +1947,8 @@ template hasToString(T, Char)
|
|||
}
|
||||
static struct I
|
||||
{
|
||||
void toString(Writer)(ref Writer w) if (isOutputRange!(Writer, string)) {}
|
||||
void toString(Writer)(ref Writer w)
|
||||
if (isOutputRange!(Writer, string)) {}
|
||||
void toString(Writer)(ref Writer w, scope const ref FormatSpec!char fmt)
|
||||
if (isOutputRange!(Writer, string))
|
||||
{}
|
||||
|
@ -2042,7 +2044,8 @@ template hasToString(T, Char)
|
|||
static struct G
|
||||
{
|
||||
string toString() const {return "";}
|
||||
void toString(Writer)(ref Writer w) const if (isOutputRange!(Writer, string)) {}
|
||||
void toString(Writer)(ref Writer w) const
|
||||
if (isOutputRange!(Writer, string)) {}
|
||||
}
|
||||
static struct H
|
||||
{
|
||||
|
@ -2053,7 +2056,8 @@ template hasToString(T, Char)
|
|||
}
|
||||
static struct I
|
||||
{
|
||||
void toString(Writer)(ref Writer w) const if (isOutputRange!(Writer, string)) {}
|
||||
void toString(Writer)(ref Writer w) const
|
||||
if (isOutputRange!(Writer, string)) {}
|
||||
void toString(Writer)(ref Writer w, scope const ref FormatSpec!char fmt) const
|
||||
if (isOutputRange!(Writer, string))
|
||||
{}
|
||||
|
@ -2603,7 +2607,8 @@ if ((is(T == struct) || is(T == union)) && (hasToString!(T, Char) || !is(Builtin
|
|||
{
|
||||
int n = 0;
|
||||
alias n this;
|
||||
T opCast(T) () if (is(T == Frop))
|
||||
T opCast(T) ()
|
||||
if (is(T == Frop))
|
||||
{
|
||||
return Frop();
|
||||
}
|
||||
|
|
|
@ -250,7 +250,8 @@ private:
|
|||
data = x;
|
||||
}
|
||||
package(std) // used from: std.bigint
|
||||
this(T)(T x) pure nothrow @safe scope if (isIntegral!T)
|
||||
this(T)(T x) pure nothrow @safe scope
|
||||
if (isIntegral!T)
|
||||
{
|
||||
opAssign(x);
|
||||
}
|
||||
|
@ -312,7 +313,8 @@ public:
|
|||
}
|
||||
|
||||
///
|
||||
void opAssign(Tulong)(Tulong u) pure nothrow @safe scope if (is (Tulong == ulong))
|
||||
void opAssign(Tulong)(Tulong u) pure nothrow @safe scope
|
||||
if (is (Tulong == ulong))
|
||||
{
|
||||
if (u == 0) data = ZERO;
|
||||
else if (u == 1) data = ONE;
|
||||
|
@ -356,7 +358,8 @@ public:
|
|||
}
|
||||
|
||||
///
|
||||
int opCmp(Tulong)(Tulong y) pure nothrow @nogc const @safe scope if (is (Tulong == ulong))
|
||||
int opCmp(Tulong)(Tulong y) pure nothrow @nogc const @safe scope
|
||||
if (is (Tulong == ulong))
|
||||
{
|
||||
if (data.length > maxBigDigits!Tulong)
|
||||
return 1;
|
||||
|
@ -501,8 +504,8 @@ public:
|
|||
}
|
||||
|
||||
// return false if invalid character found
|
||||
bool fromHexString(Range)(Range s) scope if (
|
||||
isBidirectionalRange!Range && isSomeChar!(ElementType!Range))
|
||||
bool fromHexString(Range)(Range s) scope
|
||||
if (isBidirectionalRange!Range && isSomeChar!(ElementType!Range))
|
||||
{
|
||||
import std.range : walkLength;
|
||||
|
||||
|
@ -570,8 +573,8 @@ public:
|
|||
}
|
||||
|
||||
// return true if OK; false if erroneous characters found
|
||||
bool fromDecimalString(Range)(Range s) scope if (
|
||||
isForwardRange!Range && isSomeChar!(ElementType!Range))
|
||||
bool fromDecimalString(Range)(Range s) scope
|
||||
if (isForwardRange!Range && isSomeChar!(ElementType!Range))
|
||||
{
|
||||
import std.range : walkLength;
|
||||
|
||||
|
@ -761,8 +764,8 @@ public:
|
|||
|
||||
// If wantSub is false, return x + y, leaving sign unchanged
|
||||
// If wantSub is true, return abs(x - y), negating sign if x < y
|
||||
static BigUint addOrSubInt(Tulong)(const scope BigUint x, Tulong y,
|
||||
bool wantSub, ref bool sign) pure nothrow @safe if (is(Tulong == ulong))
|
||||
static BigUint addOrSubInt(Tulong)(const scope BigUint x, Tulong y, bool wantSub, ref bool sign) pure nothrow @safe
|
||||
if (is(Tulong == ulong))
|
||||
{
|
||||
BigUint r;
|
||||
if (wantSub)
|
||||
|
@ -921,7 +924,8 @@ public:
|
|||
}
|
||||
|
||||
// return x % y
|
||||
static uint modInt(T)(scope BigUint x, T y_) pure if ( is(immutable T == immutable uint) )
|
||||
static uint modInt(T)(scope BigUint x, T y_) pure
|
||||
if ( is(immutable T == immutable uint) )
|
||||
{
|
||||
import core.memory : GC;
|
||||
uint y = y_;
|
||||
|
@ -994,7 +998,8 @@ public:
|
|||
|
||||
// return x op y
|
||||
static BigUint bitwiseOp(string op)(scope BigUint x, scope BigUint y, bool xSign, bool ySign, ref bool resultSign)
|
||||
pure nothrow @safe if (op == "|" || op == "^" || op == "&")
|
||||
pure nothrow @safe
|
||||
if (op == "|" || op == "^" || op == "&")
|
||||
{
|
||||
auto d1 = includeSign(x.data, y.uintLength, xSign);
|
||||
auto d2 = includeSign(y.data, x.uintLength, ySign);
|
||||
|
|
|
@ -255,7 +255,8 @@ class ReferenceInputRange(T)
|
|||
{
|
||||
import std.array : array;
|
||||
|
||||
this(Range)(Range r) if (isInputRange!Range) {_payload = array(r);}
|
||||
this(Range)(Range r)
|
||||
if (isInputRange!Range) {_payload = array(r);}
|
||||
final @property ref T front() {return _payload.front;}
|
||||
final void popFront() {_payload.popFront();}
|
||||
final @property bool empty() {return _payload.empty;}
|
||||
|
@ -279,7 +280,8 @@ Reference forward range
|
|||
*/
|
||||
class ReferenceForwardRange(T) : ReferenceInputRange!T
|
||||
{
|
||||
this(Range)(Range r) if (isInputRange!Range) {super(r);}
|
||||
this(Range)(Range r)
|
||||
if (isInputRange!Range) {super(r);}
|
||||
final @property auto save(this This)() {return new This( _payload);}
|
||||
}
|
||||
|
||||
|
@ -298,7 +300,8 @@ Reference bidirectional range
|
|||
*/
|
||||
class ReferenceBidirectionalRange(T) : ReferenceForwardRange!T
|
||||
{
|
||||
this(Range)(Range r) if (isInputRange!Range) {super(r);}
|
||||
this(Range)(Range r)
|
||||
if (isInputRange!Range) {super(r);}
|
||||
final @property ref T back() {return _payload.back;}
|
||||
final void popBack() {_payload.popBack();}
|
||||
}
|
||||
|
|
15
std/json.d
15
std/json.d
|
@ -652,7 +652,8 @@ struct JSONValue
|
|||
}
|
||||
}
|
||||
|
||||
private void assignRef(T)(ref T arg) if (isStaticArray!T)
|
||||
private void assignRef(T)(ref T arg)
|
||||
if (isStaticArray!T)
|
||||
{
|
||||
type_tag = JSONType.array;
|
||||
static if (is(ElementEncodingType!T : JSONValue))
|
||||
|
@ -680,12 +681,14 @@ struct JSONValue
|
|||
* and `K` i.e. a JSON object, any array or `bool`. The type will
|
||||
* be set accordingly.
|
||||
*/
|
||||
this(T)(T arg) if (!isStaticArray!T)
|
||||
this(T)(T arg)
|
||||
if (!isStaticArray!T)
|
||||
{
|
||||
assign(arg);
|
||||
}
|
||||
/// Ditto
|
||||
this(T)(ref T arg) if (isStaticArray!T)
|
||||
this(T)(ref T arg)
|
||||
if (isStaticArray!T)
|
||||
{
|
||||
assignRef(arg);
|
||||
}
|
||||
|
@ -774,12 +777,14 @@ struct JSONValue
|
|||
assert(arr1 != arr2);
|
||||
}
|
||||
|
||||
void opAssign(T)(T arg) if (!isStaticArray!T && !is(T : JSONValue))
|
||||
void opAssign(T)(T arg)
|
||||
if (!isStaticArray!T && !is(T : JSONValue))
|
||||
{
|
||||
assign(arg);
|
||||
}
|
||||
|
||||
void opAssign(T)(ref T arg) if (isStaticArray!T)
|
||||
void opAssign(T)(ref T arg)
|
||||
if (isStaticArray!T)
|
||||
{
|
||||
assignRef(arg);
|
||||
}
|
||||
|
|
|
@ -496,7 +496,8 @@ public:
|
|||
static @property CustomFloat im() { return CustomFloat(0.0f); }
|
||||
|
||||
/// Initialize from any `real` compatible type.
|
||||
this(F)(F input) if (__traits(compiles, cast(real) input ))
|
||||
this(F)(F input)
|
||||
if (__traits(compiles, cast(real) input ))
|
||||
{
|
||||
this = input;
|
||||
}
|
||||
|
|
|
@ -2269,7 +2269,8 @@ public:
|
|||
call to `popFront` or, if thrown during construction, simply
|
||||
allowed to propagate to the caller.
|
||||
*/
|
||||
auto asyncBuf(S)(S source, size_t bufSize = 100) if (isInputRange!S)
|
||||
auto asyncBuf(S)(S source, size_t bufSize = 100)
|
||||
if (isInputRange!S)
|
||||
{
|
||||
static final class AsyncBuf
|
||||
{
|
||||
|
|
|
@ -1446,8 +1446,7 @@ private auto _withDefaultExtension(R, C)(R path, C[] ext)
|
|||
of segments to assemble the path from.
|
||||
Returns: The assembled path.
|
||||
*/
|
||||
immutable(ElementEncodingType!(ElementType!Range))[]
|
||||
buildPath(Range)(scope Range segments)
|
||||
immutable(ElementEncodingType!(ElementType!Range))[] buildPath(Range)(scope Range segments)
|
||||
if (isInputRange!Range && !isInfinite!Range && isSomeString!(ElementType!Range))
|
||||
{
|
||||
if (segments.empty) return null;
|
||||
|
|
13
std/random.d
13
std/random.d
|
@ -935,7 +935,8 @@ Parameters for the generator.
|
|||
`Exception` if the InputRange didn't provide enough elements to seed the generator.
|
||||
The number of elements required is the 'n' template parameter of the MersenneTwisterEngine struct.
|
||||
*/
|
||||
void seed(T)(T range) if (isInputRange!T && is(immutable ElementType!T == immutable UIntType))
|
||||
void seed(T)(T range)
|
||||
if (isInputRange!T && is(immutable ElementType!T == immutable UIntType))
|
||||
{
|
||||
this.seedImpl(range, this.state);
|
||||
}
|
||||
|
@ -2215,6 +2216,7 @@ at least that number won't be represented fairly.
|
|||
Hence, our condition to reroll is
|
||||
`bucketFront > (UpperType.max - (upperDist - 1))`
|
||||
+/
|
||||
/// ditto
|
||||
auto uniform(string boundaries = "[)", T1, T2, RandomGen)
|
||||
(T1 a, T2 b, ref RandomGen rng)
|
||||
if ((isIntegral!(CommonType!(T1, T2)) || isSomeChar!(CommonType!(T1, T2))) &&
|
||||
|
@ -2277,9 +2279,14 @@ if ((isIntegral!(CommonType!(T1, T2)) || isSomeChar!(CommonType!(T1, T2))) &&
|
|||
return cast(ResultType)(lower + offset);
|
||||
}
|
||||
|
||||
///
|
||||
@safe unittest
|
||||
{
|
||||
import std.conv : to;
|
||||
import std.meta : AliasSeq;
|
||||
import std.range.primitives : isForwardRange;
|
||||
import std.traits : isIntegral, isSomeChar;
|
||||
|
||||
auto gen = Mt19937(123_456_789);
|
||||
static assert(isForwardRange!(typeof(gen)));
|
||||
|
||||
|
@ -2290,7 +2297,7 @@ if ((isIntegral!(CommonType!(T1, T2)) || isSomeChar!(CommonType!(T1, T2))) &&
|
|||
auto c = uniform(0.0, 1.0);
|
||||
assert(0 <= c && c < 1);
|
||||
|
||||
static foreach (T; std.meta.AliasSeq!(char, wchar, dchar, byte, ubyte, short, ushort,
|
||||
static foreach (T; AliasSeq!(char, wchar, dchar, byte, ubyte, short, ushort,
|
||||
int, uint, long, ulong, float, double, real))
|
||||
{{
|
||||
T lo = 0, hi = 100;
|
||||
|
@ -2344,7 +2351,7 @@ if ((isIntegral!(CommonType!(T1, T2)) || isSomeChar!(CommonType!(T1, T2))) &&
|
|||
|
||||
auto reproRng = Xorshift(239842);
|
||||
|
||||
static foreach (T; std.meta.AliasSeq!(char, wchar, dchar, byte, ubyte, short,
|
||||
static foreach (T; AliasSeq!(char, wchar, dchar, byte, ubyte, short,
|
||||
ushort, int, uint, long, ulong))
|
||||
{{
|
||||
T lo = T.min + 10, hi = T.max - 10;
|
||||
|
|
|
@ -7492,7 +7492,8 @@ if (!isIntegral!(CommonType!(B, E)) &&
|
|||
|
||||
bool opEquals(Cyclic c) const { return current == c.current; }
|
||||
bool opEquals(int i) const { return current == i; }
|
||||
void opUnary(string op)() if (op == "++")
|
||||
void opUnary(string op)()
|
||||
if (op == "++")
|
||||
{
|
||||
current = (current + 1) % wrapAround;
|
||||
}
|
||||
|
|
|
@ -474,7 +474,8 @@ void put(R, E)(ref R r, E e)
|
|||
{
|
||||
string data;
|
||||
|
||||
void put(C)(C c) if (isSomeChar!C)
|
||||
void put(C)(C c)
|
||||
if (isSomeChar!C)
|
||||
{
|
||||
data ~= c;
|
||||
}
|
||||
|
|
|
@ -3044,7 +3044,8 @@ is empty, throws an `Exception`. In case of an I/O error throws
|
|||
}
|
||||
|
||||
/// ditto
|
||||
void put(C)(scope C c) @safe if (isSomeChar!C || is(C : const(ubyte)))
|
||||
void put(C)(scope C c) @safe
|
||||
if (isSomeChar!C || is(C : const(ubyte)))
|
||||
{
|
||||
import std.utf : decodeFront, encode, stride;
|
||||
|
||||
|
|
|
@ -7367,10 +7367,12 @@ template isInstanceOf(alias S, alias T)
|
|||
static struct A(T = void)
|
||||
{
|
||||
// doesn't work as expected, only accepts A when T = void
|
||||
void func(B)(B b) if (isInstanceOf!(A, B)) {}
|
||||
void func(B)(B b)
|
||||
if (isInstanceOf!(A, B)) {}
|
||||
|
||||
// correct behavior
|
||||
void method(B)(B b) if (isInstanceOf!(TemplateOf!(A), B)) {}
|
||||
void method(B)(B b)
|
||||
if (isInstanceOf!(TemplateOf!(A), B)) {}
|
||||
}
|
||||
|
||||
A!(void) a1;
|
||||
|
|
|
@ -2235,12 +2235,14 @@ template tuple(Names...)
|
|||
// e.g. Tuple!(int, "x", string, "y")
|
||||
template Interleave(A...)
|
||||
{
|
||||
template and(B...) if (B.length == 1)
|
||||
template and(B...)
|
||||
if (B.length == 1)
|
||||
{
|
||||
alias and = AliasSeq!(A[0], B[0]);
|
||||
}
|
||||
|
||||
template and(B...) if (B.length != 1)
|
||||
template and(B...)
|
||||
if (B.length != 1)
|
||||
{
|
||||
alias and = AliasSeq!(A[0], B[0],
|
||||
Interleave!(A[1..$]).and!(B[1..$]));
|
||||
|
@ -7498,7 +7500,8 @@ Constructor that initializes the payload.
|
|||
|
||||
Postcondition: `refCountedStore.isInitialized`
|
||||
*/
|
||||
this(A...)(auto ref A args) if (A.length > 0)
|
||||
this(A...)(auto ref A args)
|
||||
if (A.length > 0)
|
||||
out
|
||||
{
|
||||
assert(refCountedStore.isInitialized);
|
||||
|
@ -7931,7 +7934,8 @@ template borrow(alias fun)
|
|||
{
|
||||
import std.functional : unaryFun;
|
||||
|
||||
auto ref borrow(RC)(RC refCount) if
|
||||
auto ref borrow(RC)(RC refCount)
|
||||
if
|
||||
(
|
||||
isInstanceOf!(SafeRefCounted, RC)
|
||||
&& is(typeof(unaryFun!fun(refCount.refCountedPayload)))
|
||||
|
@ -8274,7 +8278,8 @@ mixin template Proxy(alias a)
|
|||
}
|
||||
}
|
||||
|
||||
auto ref opAssign (this X, V )(auto ref V v) if (!is(V == typeof(this))) { return a = v; }
|
||||
auto ref opAssign (this X, V )(auto ref V v)
|
||||
if (!is(V == typeof(this))) { return a = v; }
|
||||
auto ref opIndexAssign(this X, V, D...)(auto ref V v, auto ref D i) { return a[i] = v; }
|
||||
auto ref opSliceAssign(this X, V )(auto ref V v) { return a[] = v; }
|
||||
auto ref opSliceAssign(this X, V, B, E)(auto ref V v, auto ref B b, auto ref E e) { return a[b .. e] = v; }
|
||||
|
@ -10653,25 +10658,29 @@ struct Ternary
|
|||
$(TR $(TD `unknown`) $(TD `unknown`) $(TD) $(TD `unknown`) $(TD `unknown`) $(TD `unknown`))
|
||||
)
|
||||
*/
|
||||
Ternary opUnary(string s)() if (s == "~")
|
||||
Ternary opUnary(string s)()
|
||||
if (s == "~")
|
||||
{
|
||||
return make((386 >> value) & 6);
|
||||
}
|
||||
|
||||
/// ditto
|
||||
Ternary opBinary(string s)(Ternary rhs) if (s == "|")
|
||||
Ternary opBinary(string s)(Ternary rhs)
|
||||
if (s == "|")
|
||||
{
|
||||
return make((25_512 >> (value + rhs.value)) & 6);
|
||||
}
|
||||
|
||||
/// ditto
|
||||
Ternary opBinary(string s)(Ternary rhs) if (s == "&")
|
||||
Ternary opBinary(string s)(Ternary rhs)
|
||||
if (s == "&")
|
||||
{
|
||||
return make((26_144 >> (value + rhs.value)) & 6);
|
||||
}
|
||||
|
||||
/// ditto
|
||||
Ternary opBinary(string s)(Ternary rhs) if (s == "^")
|
||||
Ternary opBinary(string s)(Ternary rhs)
|
||||
if (s == "^")
|
||||
{
|
||||
return make((26_504 >> (value + rhs.value)) & 6);
|
||||
}
|
||||
|
@ -10937,7 +10946,8 @@ struct RefCounted(T, RefCountedAutoInitialize autoInit =
|
|||
return _refCounted;
|
||||
}
|
||||
|
||||
this(A...)(auto ref A args) if (A.length > 0)
|
||||
this(A...)(auto ref A args)
|
||||
if (A.length > 0)
|
||||
out
|
||||
{
|
||||
assert(refCountedStore.isInitialized);
|
||||
|
|
|
@ -331,7 +331,8 @@ public struct UUID
|
|||
*
|
||||
* For a less strict parser, see $(LREF parseUUID)
|
||||
*/
|
||||
this(T)(in T[] uuid) if (isSomeChar!T)
|
||||
this(T)(in T[] uuid)
|
||||
if (isSomeChar!T)
|
||||
{
|
||||
import std.conv : to, parse;
|
||||
if (uuid.length < 36)
|
||||
|
|
|
@ -1191,7 +1191,8 @@ public:
|
|||
If the `VariantN` contains an array, applies `dg` to each
|
||||
element of the array in turn. Otherwise, throws an exception.
|
||||
*/
|
||||
int opApply(Delegate)(scope Delegate dg) if (is(Delegate == delegate))
|
||||
int opApply(Delegate)(scope Delegate dg)
|
||||
if (is(Delegate == delegate))
|
||||
{
|
||||
alias A = Parameters!(Delegate)[0];
|
||||
if (type == typeid(A[]))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue