Skip to content

Commit

Permalink
Fix compatibility with D 2.099 (#146)
Browse files Browse the repository at this point in the history
* Fix compatibility with D <2.102

* Fix compatibility with D <2.101

* Avoid shortened-methods syntax

This allows compiling without `-preview=shortenedMethods` on D <2.104.
D <2.096 did not support them at all.

* Fix compatibility with D <2.100

* Add an older DMD to the CI
  • Loading branch information
SirNickolas authored Dec 19, 2023
1 parent 2454a72 commit a6b5553
Show file tree
Hide file tree
Showing 5 changed files with 15 additions and 12 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macOS-latest]
dc: [dmd-latest, ldc-latest]
dc: [dmd-2.099.1, dmd-latest, ldc-latest]

runs-on: ${{ matrix.os }}
steps:
Expand Down
4 changes: 2 additions & 2 deletions source/argparse/ansi.d
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ package struct TextStyle
{
private string style = prefix;

private this(const(ubyte)[] st...) scope inout nothrow pure @safe
private this(scope const(ubyte)[] st...) scope inout nothrow pure @safe
{
import std.algorithm.iteration: joiner, map;
import std.array: appender;
Expand Down Expand Up @@ -256,7 +256,7 @@ private inout(char)[][2] findNextTextChunk(return scope inout(char)[] text) noth
}
}

public auto getUnstyledText(C : char)(C[] text)
public auto getUnstyledText(C : char)(return scope C[] text)
{
struct Unstyler
{
Expand Down
9 changes: 6 additions & 3 deletions source/argparse/internal/argumentudahelpers.d
Original file line number Diff line number Diff line change
Expand Up @@ -68,13 +68,16 @@ private template defaultValuesCount(T)
package auto getMemberArgumentUDA(TYPE, string symbol)(const Config config)
{
import argparse.internal.arguments: finalize;
import std.meta: Filter;
import std.meta: AliasSeq, Filter;

alias member = __traits(getMember, TYPE, symbol);
alias MemberType = typeof(member);

alias udas = Filter!(isArgumentUDA, __traits(getAttributes, member));
alias typeUDAs = Filter!(isArgumentUDA, __traits(getAttributes, MemberType));
alias udas = Filter!(isArgumentUDA, __traits(getAttributes, member));
static if(__traits(compiles, __traits(getAttributes, MemberType)))
alias typeUDAs = Filter!(isArgumentUDA, __traits(getAttributes, MemberType));
else // On D <2.101, we are not allowed to query attributes of built-in types
alias typeUDAs = AliasSeq!();

static assert(udas.length <= 1, "Member "~TYPE.stringof~"."~symbol~" has multiple '*Argument' UDAs");
static assert(typeUDAs.length <= 1, "Type "~MemberType.stringof~" has multiple '*Argument' UDAs");
Expand Down
4 changes: 2 additions & 2 deletions source/argparse/internal/parser.d
Original file line number Diff line number Diff line change
Expand Up @@ -333,15 +333,15 @@ private Entry getNextEntry(bool bundling)(Config config, ref string[] args,

unittest
{
auto test(string[] args) => getNextEntry!false(Config.init, args, null, null, null);
auto test(string[] args) { return getNextEntry!false(Config.init, args, null, null, null); }

assert(test([""]) == Entry(Unknown("")));
assert(test(["--","a","-b","c"]) == Entry(EndOfArgs(["a","-b","c"])));
}

unittest
{
auto test(string[] args) => getNextEntry!false(Config.init, args, null, null, null);
auto test(string[] args) { return getNextEntry!false(Config.init, args, null, null, null); }

assert(test([""]) == Entry(Unknown("")));
assert(test(["--","a","-b","c"]) == Entry(EndOfArgs(["a","-b","c"])));
Expand Down
8 changes: 4 additions & 4 deletions source/argparse/internal/restriction.d
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ unittest
{
auto f = RequiredArg(Config.init, ArgumentInfo([],[],[""]), 0);

assert(f(bool[size_t].init).isError("argument is required"));
assert(f((bool[size_t]).init).isError("argument is required"));

assert(f([1:true]).isError("argument is required"));

Expand Down Expand Up @@ -64,7 +64,7 @@ unittest
{
auto f = RequiredTogether(Config.init, [ArgumentInfo([],[],["--a"]), ArgumentInfo([],[],["--b"]), ArgumentInfo([],[],["--c"])]);

assert(f(bool[size_t].init, [0,1]));
assert(f((bool[size_t]).init, [0,1]));

assert(f([0:true], [0,1]).isError("Missed argument","--a"));
assert(f([1:true], [0,1]).isError("Missed argument","--b"));
Expand Down Expand Up @@ -95,7 +95,7 @@ unittest
{
auto f = RequiredAnyOf(Config.init, [ArgumentInfo([],[],["--a"]), ArgumentInfo([],[],["--b"]), ArgumentInfo([],[],["--c"])]);

assert(f(bool[size_t].init, [0,1]).isError("One of the following arguments is required","--a","--b"));
assert(f((bool[size_t]).init, [0,1]).isError("One of the following arguments is required","--a","--b"));
assert(f([2:true], [0,1]).isError("One of the following arguments is required","--a","--b"));

assert(f([0:true], [0,1]));
Expand Down Expand Up @@ -131,7 +131,7 @@ unittest
{
auto f = MutuallyExclusive(Config.init, [ArgumentInfo([],[],["--a"]), ArgumentInfo([],[],["--b"]), ArgumentInfo([],[],["--c"])]);

assert(f(bool[size_t].init, [0,1]));
assert(f((bool[size_t]).init, [0,1]));

assert(f([0:true], [0,1]));
assert(f([1:true], [0,1]));
Expand Down

0 comments on commit a6b5553

Please sign in to comment.