Skip to content

v2.096.0+ Shortened Methods don't work #361

@VisualEhrmanntraut

Description

@VisualEhrmanntraut

v2.096.0+ -preview=shortenedMethods don't work
tried with "d.servedReleaseChannel": "stable" and "d.servedReleaseChannel": "nightly"
Code-d version: v0.22.0
DCD version: v0.13.4
Serve-d version: serve-d v0.7.0-beta.6 with workspace-d v3.5.0

Example code (taken from dlang/dmd/test/compilable/shortened_methods.d):

module Source.UEFI.Protocols.Test;

class A {
    int _x = 34;
    // short syntax works in all contexts
    @property x() => _x;
    @property x(int v) => _x = v;

    // including with contracts
    @property y() in(true) => _x;

    // or other auto returns
    auto foo() @safe => assert(0);

    // or normal method defintions
    bool isNull() => this is null;
}

class B : A{
    // short syntax also overrides the same as long syntax
    override bool isNull() => this !is null;
}

static assert((new A).x == 34);

string test() => "hello"; // works at any scope

static assert(test() == "hello"); // works normally
static assert(is(typeof(&test) == string function())); // same normal type

void func() {
    int a;
    int nested() => a; // and at nested scopes too
}
Test.d(6:19)[error]: Expected `{` instead of `=>`
Test.d(7:24)[error]: Expected `{` instead of `=>`
Test.d(10:28)[error]: Expected `{` instead of `=>`
Test.d(13:22)[error]: Expected `{` instead of `=>`
Test.d(13:34)[warn]: Empty declaration
Test.d(16:19)[error]: Expected `{` instead of `=>`
Test.d(17:1)[error]: invalid variable declaration or function declaration
Test.d(21:28)[error]: Expected `{` instead of `=>`
Test.d(22:1)[error]: invalid variable declaration or function declaration
Test.d(26:15)[error]: Expected `{` instead of `=>`
Test.d(28:1)[error]: invalid variable declaration or function declaration
Test.d(33:9)[error]: Primary expression expected
Test.d(33:18)[error]: Primary expression expected
serve-d Verbose output
[Trace - 2:42:17 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {
    "diagnostics": [
        {
            "code": "",
            "message": "Expected `{` instead of `=>`",
            "range": {
                "end": {
                    "character": 60,
                    "line": 36
                },
                "start": {
                    "character": 50,
                    "line": 36
                }
            },
            "severity": 1,
            "source": "DScanner"
        },
        {
            "code": "",
            "message": "invalid variable declaration or function declaration",
            "range": {
                "end": {
                    "character": 102,
                    "line": 36
                },
                "start": {
                    "character": 101,
                    "line": 36
                }
            },
            "severity": 1,
            "source": "DScanner"
        },
        {
            "code": "",
            "message": "Empty declaration",
            "range": {
                "end": {
                    "character": 102,
                    "line": 36
                },
                "start": {
                    "character": 101,
                    "line": 36
                }
            },
            "severity": 2,
            "source": "DScanner"
        },
        {
            "code": "",
            "message": "Expected `{` instead of `=>`",
            "range": {
                "end": {
                    "character": 60,
                    "line": 37
                },
                "start": {
                    "character": 50,
                    "line": 37
                }
            },
            "severity": 1,
            "source": "DScanner"
        },
        {
            "code": "",
            "message": "invalid variable declaration or function declaration",
            "range": {
                "end": {
                    "character": 102,
                    "line": 37
                },
                "start": {
                    "character": 99,
                    "line": 37
                }
            },
            "severity": 1,
            "source": "DScanner"
        },
        {
            "code": "",
            "message": "no identifier for declarator",
            "range": {
                "end": {
                    "character": 107,
                    "line": 37
                },
                "start": {
                    "character": 106,
                    "line": 37
                }
            },
            "severity": 1,
            "source": "DScanner"
        },
        {
            "code": "",
            "message": "Empty declaration",
            "range": {
                "end": {
                    "character": 108,
                    "line": 37
                },
                "start": {
                    "character": 107,
                    "line": 37
                }
            },
            "severity": 2,
            "source": "DScanner"
        },
        {
            "code": "",
            "message": "Expected `{` instead of `=>`",
            "range": {
                "end": {
                    "character": 58,
                    "line": 38
                },
                "start": {
                    "character": 48,
                    "line": 38
                }
            },
            "severity": 1,
            "source": "DScanner"
        },
        {
            "code": "",
            "message": "invalid variable declaration or function declaration",
            "range": {
                "end": {
                    "character": 98,
                    "line": 38
                },
                "start": {
                    "character": 95,
                    "line": 38
                }
            },
            "severity": 1,
            "source": "DScanner"
        },
        {
            "code": "",
            "message": "no identifier for declarator",
            "range": {
                "end": {
                    "character": 103,
                    "line": 38
                },
                "start": {
                    "character": 102,
                    "line": 38
                }
            },
            "severity": 1,
            "source": "DScanner"
        },
        {
            "code": "",
            "message": "Empty declaration",
            "range": {
                "end": {
                    "character": 104,
                    "line": 38
                },
                "start": {
                    "character": 103,
                    "line": 38
                }
            },
            "severity": 2,
            "source": "DScanner"
        },
        {
            "code": "",
            "message": "Expected `{` instead of `=>`",
            "range": {
                "end": {
                    "character": 81,
                    "line": 39
                },
                "start": {
                    "character": 71,
                    "line": 39
                }
            },
            "severity": 1,
            "source": "DScanner"
        },
        {
            "code": "",
            "message": "invalid variable declaration or function declaration",
            "range": {
                "end": {
                    "character": 126,
                    "line": 39
                },
                "start": {
                    "character": 125,
                    "line": 39
                }
            },
            "severity": 1,
            "source": "DScanner"
        },
        {
            "code": "",
            "message": "Empty declaration",
            "range": {
                "end": {
                    "character": 126,
                    "line": 39
                },
                "start": {
                    "character": 125,
                    "line": 39
                }
            },
            "severity": 2,
            "source": "DScanner"
        },
        {
            "code": "",
            "message": "Expected `{` instead of `=>`",
            "range": {
                "end": {
                    "character": 48,
                    "line": 40
                },
                "start": {
                    "character": 38,
                    "line": 40
                }
            },
            "severity": 1,
            "source": "DScanner"
        },
        {
            "code": "",
            "message": "invalid variable declaration or function declaration",
            "range": {
                "end": {
                    "character": 76,
                    "line": 40
                },
                "start": {
                    "character": 75,
                    "line": 40
                }
            },
            "severity": 1,
            "source": "DScanner"
        },
        {
            "code": "",
            "message": "Empty declaration",
            "range": {
                "end": {
                    "character": 76,
                    "line": 40
                },
                "start": {
                    "character": 75,
                    "line": 40
                }
            },
            "severity": 2,
            "source": "DScanner"
        },
        {
            "code": "",
            "message": "Expected `{` instead of `=>`",
            "range": {
                "end": {
                    "character": 58,
                    "line": 41
                },
                "start": {
                    "character": 48,
                    "line": 41
                }
            },
            "severity": 1,
            "source": "DScanner"
        },
        {
            "code": "",
            "message": "invalid variable declaration or function declaration",
            "range": {
                "end": {
                    "character": 96,
                    "line": 41
                },
                "start": {
                    "character": 95,
                    "line": 41
                }
            },
            "severity": 1,
            "source": "DScanner"
        },
        {
            "code": "",
            "message": "Empty declaration",
            "range": {
                "end": {
                    "character": 96,
                    "line": 41
                },
                "start": {
                    "character": 95,
                    "line": 41
                }
            },
            "severity": 2,
            "source": "DScanner"
        },
        {
            "code": "",
            "message": "Expected `{` instead of `=>`",
            "range": {
                "end": {
                    "character": 41,
                    "line": 42
                },
                "start": {
                    "character": 31,
                    "line": 42
                }
            },
            "severity": 1,
            "source": "DScanner"
        },
        {
            "code": "",
            "message": "invalid variable declaration or function declaration",
            "range": {
                "end": {
                    "character": 67,
                    "line": 42
                },
                "start": {
                    "character": 66,
                    "line": 42
                }
            },
            "severity": 1,
            "source": "DScanner"
        },
        {
            "code": "",
            "message": "Empty declaration",
            "range": {
                "end": {
                    "character": 67,
                    "line": 42
                },
                "start": {
                    "character": 66,
                    "line": 42
                }
            },
            "severity": 2,
            "source": "DScanner"
        },
        {
            "code": "",
            "message": "Expected `{` instead of `=>`",
            "range": {
                "end": {
                    "character": 72,
                    "line": 43
                },
                "start": {
                    "character": 62,
                    "line": 43
                }
            },
            "severity": 1,
            "source": "DScanner"
        },
        {
            "code": "",
            "message": "invalid variable declaration or function declaration",
            "range": {
                "end": {
                    "character": 117,
                    "line": 43
                },
                "start": {
                    "character": 116,
                    "line": 43
                }
            },
            "severity": 1,
            "source": "DScanner"
        },
        {
            "code": "",
            "message": "Empty declaration",
            "range": {
                "end": {
                    "character": 117,
                    "line": 43
                },
                "start": {
                    "character": 116,
                    "line": 43
                }
            },
            "severity": 2,
            "source": "DScanner"
        },
        {
            "code": "",
            "message": "Expected `{` instead of `=>`",
            "range": {
                "end": {
                    "character": 54,
                    "line": 44
                },
                "start": {
                    "character": 44,
                    "line": 44
                }
            },
            "severity": 1,
            "source": "DScanner"
        },
        {
            "code": "",
            "message": "invalid variable declaration or function declaration",
            "range": {
                "end": {
                    "character": 90,
                    "line": 44
                },
                "start": {
                    "character": 89,
                    "line": 44
                }
            },
            "severity": 1,
            "source": "DScanner"
        },
        {
            "code": "",
            "message": "Empty declaration",
            "range": {
                "end": {
                    "character": 90,
                    "line": 44
                },
                "start": {
                    "character": 89,
                    "line": 44
                }
            },
            "severity": 2,
            "source": "DScanner"
        },
        {
            "code": "dscanner.style.phobos_naming_convention",
            "message": "Module/package name 'UEFI' does not match style guidelines.",
            "range": {
                "end": {
                    "character": 11,
                    "line": 0
                },
                "start": {
                    "character": 7,
                    "line": 0
                }
            },
            "severity": 2,
            "source": "DScanner"
        },
        {
            "code": "dscanner.style.phobos_naming_convention",
            "message": "Module/package name 'Protocols' does not match style guidelines.",
            "range": {
                "end": {
                    "character": 21,
                    "line": 0
                },
                "start": {
                    "character": 12,
                    "line": 0
                }
            },
            "severity": 2,
            "source": "DScanner"
        },
        {
            "code": "dscanner.style.phobos_naming_convention",
            "message": "Module/package name 'ConOut' does not match style guidelines.",
            "range": {
                "end": {
                    "character": 28,
                    "line": 0
                },
                "start": {
                    "character": 22,
                    "line": 0
                }
            },
            "severity": 2,
            "source": "DScanner"
        },
        {
            "code": "dscanner.style.phobos_naming_convention",
            "message": "Variable name 'Reset_' does not match style guidelines.",
            "range": {
                "end": {
                    "character": 26,
                    "line": 25
                },
                "start": {
                    "character": 20,
                    "line": 25
                }
            },
            "severity": 2,
            "source": "DScanner"
        },
        {
            "code": "dscanner.style.phobos_naming_convention",
            "message": "Variable name 'OutputString_' does not match style guidelines.",
            "range": {
                "end": {
                    "character": 40,
                    "line": 26
                },
                "start": {
                    "character": 27,
                    "line": 26
                }
            },
            "severity": 2,
            "source": "DScanner"
        },
        {
            "code": "dscanner.style.phobos_naming_convention",
            "message": "Variable name 'TestString_' does not match style guidelines.",
            "range": {
                "end": {
                    "character": 36,
                    "line": 27
                },
                "start": {
                    "character": 25,
                    "line": 27
                }
            },
            "severity": 2,
            "source": "DScanner"
        },
        {
            "code": "dscanner.style.phobos_naming_convention",
            "message": "Variable name 'QueryMode_' does not match style guidelines.",
            "range": {
                "end": {
                    "character": 34,
                    "line": 28
                },
                "start": {
                    "character": 24,
                    "line": 28
                }
            },
            "severity": 2,
            "source": "DScanner"
        },
        {
            "code": "dscanner.style.phobos_naming_convention",
            "message": "Variable name 'SetMode_' does not match style guidelines.",
            "range": {
                "end": {
                    "character": 30,
                    "line": 29
                },
                "start": {
                    "character": 22,
                    "line": 29
                }
            },
            "severity": 2,
            "source": "DScanner"
        },
        {
            "code": "dscanner.style.phobos_naming_convention",
            "message": "Variable name 'SetAttribute_' does not match style guidelines.",
            "range": {
                "end": {
                    "character": 40,
                    "line": 30
                },
                "start": {
                    "character": 27,
                    "line": 30
                }
            },
            "severity": 2,
            "source": "DScanner"
        },
        {
            "code": "dscanner.style.phobos_naming_convention",
            "message": "Variable name 'ClearScreen_' does not match style guidelines.",
            "range": {
                "end": {
                    "character": 38,
                    "line": 31
                },
                "start": {
                    "character": 26,
                    "line": 31
                }
            },
            "severity": 2,
            "source": "DScanner"
        },
        {
            "code": "dscanner.style.phobos_naming_convention",
            "message": "Variable name 'SetCursorPosition_' does not match style guidelines.",
            "range": {
                "end": {
                    "character": 50,
                    "line": 32
                },
                "start": {
                    "character": 32,
                    "line": 32
                }
            },
            "severity": 2,
            "source": "DScanner"
        },
        {
            "code": "dscanner.style.phobos_naming_convention",
            "message": "Variable name 'EnableCursor_' does not match style guidelines.",
            "range": {
                "end": {
                    "character": 40,
                    "line": 33
                },
                "start": {
                    "character": 27,
                    "line": 33
                }
            },
            "severity": 2,
            "source": "DScanner"
        },
        {
            "code": "dscanner.style.long_line",
            "message": "Line is longer than 120 characters",
            "range": {
                "end": {
                    "character": 1000,
                    "line": 39
                },
                "start": {
                    "character": 120,
                    "line": 39
                }
            },
            "severity": 2,
            "source": "DScanner"
        }
    ],
    "uri": "file:///Users/visual/Documents/Projects/UEFITest/source/UEFI/Protocols/ConOut.d"
}


[Trace - 2:42:17 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {
    "diagnostics": [
        {
            "code": "",
            "message": "Expected `{` instead of `=>`",
            "range": {
                "end": {
                    "character": 20,
                    "line": 5
                },
                "start": {
                    "character": 14,
                    "line": 5
                }
            },
            "severity": 1,
            "source": "DScanner"
        },
        {
            "code": "",
            "message": "Expected `{` instead of `=>`",
            "range": {
                "end": {
                    "character": 25,
                    "line": 6
                },
                "start": {
                    "character": 20,
                    "line": 6
                }
            },
            "severity": 1,
            "source": "DScanner"
        },
        {
            "code": "",
            "message": "Expected `{` instead of `=>`",
            "range": {
                "end": {
                    "character": 29,
                    "line": 9
                },
                "start": {
                    "character": 21,
                    "line": 9
                }
            },
            "severity": 1,
            "source": "DScanner"
        },
        {
            "code": "",
            "message": "Expected `{` instead of `=>`",
            "range": {
                "end": {
                    "character": 23,
                    "line": 12
                },
                "start": {
                    "character": 16,
                    "line": 12
                }
            },
            "severity": 1,
            "source": "DScanner"
        },
        {
            "code": "",
            "message": "Empty declaration",
            "range": {
                "end": {
                    "character": 34,
                    "line": 12
                },
                "start": {
                    "character": 33,
                    "line": 12
                }
            },
            "severity": 2,
            "source": "DScanner"
        },
        {
            "code": "",
            "message": "Expected `{` instead of `=>`",
            "range": {
                "end": {
                    "character": 20,
                    "line": 15
                },
                "start": {
                    "character": 9,
                    "line": 15
                }
            },
            "severity": 1,
            "source": "DScanner"
        },
        {
            "code": "",
            "message": "invalid variable declaration or function declaration",
            "range": {
                "end": {
                    "character": 1,
                    "line": 16
                },
                "start": {
                    "character": 0,
                    "line": 16
                }
            },
            "severity": 1,
            "source": "DScanner"
        },
        {
            "code": "",
            "message": "Expected `{` instead of `=>`",
            "range": {
                "end": {
                    "character": 29,
                    "line": 20
                },
                "start": {
                    "character": 18,
                    "line": 20
                }
            },
            "severity": 1,
            "source": "DScanner"
        },
        {
            "code": "",
            "message": "invalid variable declaration or function declaration",
            "range": {
                "end": {
                    "character": 1,
                    "line": 21
                },
                "start": {
                    "character": 0,
                    "line": 21
                }
            },
            "severity": 1,
            "source": "DScanner"
        },
        {
            "code": "",
            "message": "Expected `{` instead of `=>`",
            "range": {
                "end": {
                    "character": 25,
                    "line": 25
                },
                "start": {
                    "character": 7,
                    "line": 25
                }
            },
            "severity": 1,
            "source": "DScanner"
        },
        {
            "code": "",
            "message": "invalid variable declaration or function declaration",
            "range": {
                "end": {
                    "character": 6,
                    "line": 27
                },
                "start": {
                    "character": 0,
                    "line": 27
                }
            },
            "severity": 1,
            "source": "DScanner"
        },
        {
            "code": "",
            "message": "Primary expression expected",
            "range": {
                "end": {
                    "character": 14,
                    "line": 32
                },
                "start": {
                    "character": 8,
                    "line": 32
                }
            },
            "severity": 1,
            "source": "DScanner"
        },
        {
            "code": "",
            "message": "Primary expression expected",
            "range": {
                "end": {
                    "character": 19,
                    "line": 32
                },
                "start": {
                    "character": 17,
                    "line": 32
                }
            },
            "severity": 1,
            "source": "DScanner"
        },
        {
            "code": "dscanner.style.phobos_naming_convention",
            "message": "Module/package name 'Source' does not match style guidelines.",
            "range": {
                "end": {
                    "character": 13,
                    "line": 0
                },
                "start": {
                    "character": 7,
                    "line": 0
                }
            },
            "severity": 2,
            "source": "DScanner"
        },
        {
            "code": "dscanner.style.phobos_naming_convention",
            "message": "Module/package name 'UEFI' does not match style guidelines.",
            "range": {
                "end": {
                    "character": 18,
                    "line": 0
                },
                "start": {
                    "character": 14,
                    "line": 0
                }
            },
            "severity": 2,
            "source": "DScanner"
        },
        {
            "code": "dscanner.style.phobos_naming_convention",
            "message": "Module/package name 'Protocols' does not match style guidelines.",
            "range": {
                "end": {
                    "character": 28,
                    "line": 0
                },
                "start": {
                    "character": 19,
                    "line": 0
                }
            },
            "severity": 2,
            "source": "DScanner"
        },
        {
            "code": "dscanner.style.phobos_naming_convention",
            "message": "Module/package name 'Test' does not match style guidelines.",
            "range": {
                "end": {
                    "character": 33,
                    "line": 0
                },
                "start": {
                    "character": 29,
                    "line": 0
                }
            },
            "severity": 2,
            "source": "DScanner"
        },
        {
            "code": "dscanner.suspicious.unused_variable",
            "message": "Variable a is never used.",
            "range": {
                "end": {
                    "character": 9,
                    "line": 31
                },
                "start": {
                    "character": 8,
                    "line": 31
                }
            },
            "severity": 4,
            "source": "DScanner",
            "tags": [
                1
            ]
        }
    ],
    "uri": "file:///Users/visual/Documents/Projects/UEFITest/Source/UEFI/Protocols/Test.d"
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions