diff --git a/source/dub/internal/utils.d b/source/dub/internal/utils.d index 83fb0ab..75c6009 100644 --- a/source/dub/internal/utils.d +++ b/source/dub/internal/utils.d @@ -427,7 +427,7 @@ static Regex!char comments_pattern, module_pattern; if (!regex_initialized) { - comments_pattern = regex(`(/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/)|(//.*)`, "g"); + comments_pattern = regex(`//[^\r\n]*\r?\n?|/\*.*\*/|/\+.*\+/`, "g"); module_pattern = regex(`module\s+([\w\.]+)\s*;`, "g"); regex_initialized = true; } @@ -435,35 +435,24 @@ content = replaceAll(content, comments_pattern, ""); auto result = matchFirst(content, module_pattern); - string moduleName; - if(!result.empty) moduleName = result.front; + if (!result.empty) return result[1]; - if (moduleName.length >= 7) moduleName = moduleName[7..$-1]; - - return moduleName; + return null; } unittest { - //test empty string - string name = getModuleNameFromContent(""); - assert(name == "", "can't get module name from empty string"); - - //test simple name - name = getModuleNameFromContent("module myPackage.myModule;"); - assert(name == "myPackage.myModule", "can't parse module name"); - - //test if it can ignore module inside comments - name = getModuleNameFromContent("/** - module fakePackage.fakeModule; - */ - module myPackage.myModule;"); - - assert(name == "myPackage.myModule", "can't parse module name"); - - name = getModuleNameFromContent("//module fakePackage.fakeModule; - module myPackage.myModule;"); - - assert(name == "myPackage.myModule", "can't parse module name"); + assert(getModuleNameFromContent("") == ""); + assert(getModuleNameFromContent("module myPackage.myModule;") == "myPackage.myModule"); + assert(getModuleNameFromContent("module \t\n myPackage.myModule \t\r\n;") == "myPackage.myModule"); + assert(getModuleNameFromContent("// foo\nmodule bar;") == "bar"); + assert(getModuleNameFromContent("/*\nfoo\n*/\nmodule bar;") == "bar"); + assert(getModuleNameFromContent("/+\nfoo\n+/\nmodule bar;") == "bar"); + assert(getModuleNameFromContent("/***\nfoo\n***/\nmodule bar;") == "bar"); + assert(getModuleNameFromContent("/+++\nfoo\n+++/\nmodule bar;") == "bar"); + assert(getModuleNameFromContent("// module foo;\nmodule bar;") == "bar"); + assert(getModuleNameFromContent("/* module foo; */\nmodule bar;") == "bar"); + assert(getModuleNameFromContent("/+ module foo; +/\nmodule bar;") == "bar"); + assert(getModuleNameFromContent("/+ /+ module foo; +/ +/\nmodule bar;") == "bar"); } /**