From 90cc58cdb39d18d23cd883906e421b28b1739ca8 Mon Sep 17 00:00:00 2001 From: WebFreak001 Date: Fri, 3 Nov 2017 15:40:31 +0100 Subject: [PATCH 1/5] fix #500 --- src/analysis/has_public_example.d | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/src/analysis/has_public_example.d b/src/analysis/has_public_example.d index 9a0bba8..fe21b33 100644 --- a/src/analysis/has_public_example.d +++ b/src/analysis/has_public_example.d @@ -42,8 +42,14 @@ class HasPublicExampleCheck : BaseAnalyzer } // check all public top-level declarations - foreach (decl; mod.declarations.filter!(decl => isPublic(decl.attributes))) + foreach (decl; mod.declarations) { + if (!isPublic(decl.attributes)) + { + checkLastDecl(); + continue; + } + const bool hasDdocHeader = hasDdocHeader(decl); // check the documentation of a unittest declaration @@ -281,14 +287,18 @@ unittest unittest {} }, sac); - /// check intermediate private declarations and ditto-ed declarations - assertAnalyzerWarnings(q{ + // check intermediate private declarations + // removed for issue #500 + /*assertAnalyzerWarnings(q{ /// C class C{} private void foo(){} /// unittest {} + }, sac);*/ + // check intermediate ditto-ed declarations + assertAnalyzerWarnings(q{ /// I interface I{} /// ditto @@ -297,6 +307,15 @@ unittest unittest {} }, sac); + // test reset on private symbols (#500) + assertAnalyzerWarnings(q{ + /// + void dirName(C)(C[] path) {} // [warn]: Public declaration 'dirName' has no documented example. + private void _dirName(R)(R path) {} + /// + unittest {} + }, sac); + stderr.writeln("Unittest for HasPublicExampleCheck passed."); } From ec8b21f8a37b048e4b63214709ccb4a7968347b3 Mon Sep 17 00:00:00 2001 From: Basile Burg Date: Mon, 6 Nov 2017 22:02:17 +0100 Subject: [PATCH 2/5] update dparse to prevent a dparse problem --- dub.json | 2 +- libdparse | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dub.json b/dub.json index 82f62e9..7f02a57 100644 --- a/dub.json +++ b/dub.json @@ -12,7 +12,7 @@ "StdLoggerDisableWarning" ], "dependencies" : { - "libdparse" : "~>0.7.2-alpha.1", + "libdparse" : "~>0.7.2-alpha.2", "dsymbol" : "~>0.2.6", "inifiled" : ">=1.0.2", "emsi_containers" : "~>0.5.3", diff --git a/libdparse b/libdparse index 222548f..0bd3235 160000 --- a/libdparse +++ b/libdparse @@ -1 +1 @@ -Subproject commit 222548fe610ee33dc60a87c9c1322aedd487dcdb +Subproject commit 0bd3235f852454a1c1c6dfe55e26786ad13bc4b5 From f48862d7a5e8d60eb5ac24483954ac42d72b00c8 Mon Sep 17 00:00:00 2001 From: Basile Burg Date: Sun, 19 Nov 2017 14:37:25 +0100 Subject: [PATCH 3/5] fix #533 - "Could be declared const" should be avoided for declarations with "new" (#534) fix #533 - "Could be declared const" should be avoided for declarations with "new" merged-on-behalf-of: Richard Andrew Cattermole --- src/analysis/unmodified.d | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/analysis/unmodified.d b/src/analysis/unmodified.d index 7acc649..1146eb7 100644 --- a/src/analysis/unmodified.d +++ b/src/analysis/unmodified.d @@ -58,6 +58,8 @@ class UnmodifiedFinder : BaseAnalyzer { if (initializedFromCast(d.initializer)) continue; + if (initializedFromNew(d.initializer)) + continue; tree[$ - 1].insert(new VariableInfo(d.name.text, d.name.line, d.name.column, isValueTypeSimple(dec.type))); } @@ -77,6 +79,8 @@ class UnmodifiedFinder : BaseAnalyzer { if (initializedFromCast(part.initializer)) continue; + if (initializedFromNew(part.initializer)) + continue; tree[$ - 1].insert(new VariableInfo(part.identifier.text, part.identifier.line, part.identifier.column)); } @@ -211,6 +215,19 @@ private: } } + bool initializedFromNew(const Initializer initializer) + { + if (initializer.nonVoidInitializer && + initializer.nonVoidInitializer.assignExpression && + cast(UnaryExpression) initializer.nonVoidInitializer.assignExpression) + { + const UnaryExpression ue = + cast(UnaryExpression) initializer.nonVoidInitializer.assignExpression; + return ue.newExpression !is null; + } + return false; + } + bool initializedFromCast(const Initializer initializer) { import std.typecons : scoped; @@ -325,6 +342,12 @@ bool isValueTypeSimple(const Type type) pure nothrow @nogc StaticAnalysisConfig sac = disabledConfig(); sac.could_be_immutable_check = Check.enabled; + // fails + + assertAnalyzerWarnings(q{ + void foo(){int i = 1;} // [warn]: Variable i is never modified and could have been declared const or immutable. + }, sac); + // pass assertAnalyzerWarnings(q{ @@ -339,4 +362,12 @@ bool isValueTypeSimple(const Type type) pure nothrow @nogc void foo(){enum i = 1;} }, sac); + assertAnalyzerWarnings(q{ + void foo(){E e = new E;} + }, sac); + + assertAnalyzerWarnings(q{ + void foo(){auto e = new E;} + }, sac); + } From 91dfc8bd4ff5598ec7e3a455cdb6ee32f4a62e75 Mon Sep 17 00:00:00 2001 From: Basile Burg Date: Sun, 19 Nov 2017 15:18:37 +0100 Subject: [PATCH 4/5] fixup f48862d7 --- src/analysis/unmodified.d | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/analysis/unmodified.d b/src/analysis/unmodified.d index 1146eb7..5d0bb47 100644 --- a/src/analysis/unmodified.d +++ b/src/analysis/unmodified.d @@ -217,7 +217,7 @@ private: bool initializedFromNew(const Initializer initializer) { - if (initializer.nonVoidInitializer && + if (initializer && initializer.nonVoidInitializer && initializer.nonVoidInitializer.assignExpression && cast(UnaryExpression) initializer.nonVoidInitializer.assignExpression) { From a3f91ca263bbfc7164046f9783f03013ce410305 Mon Sep 17 00:00:00 2001 From: Sebastian Wilzbach Date: Mon, 20 Nov 2017 14:08:06 +0100 Subject: [PATCH 5/5] Update submodules --- containers | 2 +- dsymbol | 2 +- libdparse | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/containers b/containers index 2892cfc..11289a9 160000 --- a/containers +++ b/containers @@ -1 +1 @@ -Subproject commit 2892cfc1e7a205d4f81af3970cbb53e4f365a765 +Subproject commit 11289a9ea5f9de34e01cc157c81d0a962b70628f diff --git a/dsymbol b/dsymbol index 199b171..f672685 160000 --- a/dsymbol +++ b/dsymbol @@ -1 +1 @@ -Subproject commit 199b171fb3dafa6b63a7f897371b02e9a025403a +Subproject commit f672685ab7f5408fb5a74a0cd54e5fc750090d9f diff --git a/libdparse b/libdparse index 0bd3235..7887ba3 160000 --- a/libdparse +++ b/libdparse @@ -1 +1 @@ -Subproject commit 0bd3235f852454a1c1c6dfe55e26786ad13bc4b5 +Subproject commit 7887ba3665a05a54e511850d009f8f999f89d97d