From 6018fdd2c5db3d225659f4121ba3acef8e8b27ba Mon Sep 17 00:00:00 2001 From: Jean Privat Date: Wed, 28 Jun 2017 14:55:15 -0400 Subject: [PATCH] typing: new warning `useless-truism` to catch trainees. Signed-off-by: Jean Privat --- src/semantize/typing.nit | 4 ++++ tests/sav/warn_truism.res | 4 ++++ tests/warn_truism.nit | 29 +++++++++++++++++++++++++++++ 3 files changed, 37 insertions(+) create mode 100644 tests/sav/warn_truism.res create mode 100644 tests/warn_truism.nit diff --git a/src/semantize/typing.nit b/src/semantize/typing.nit index 8890ba9..3297d12 100644 --- a/src/semantize/typing.nit +++ b/src/semantize/typing.nit @@ -2017,6 +2017,10 @@ redef class AEqFormExpr if mtype == null or mtype2 == null then return + if mtype == v.type_bool(self) and (n_expr2 isa AFalseExpr or n_expr2 isa ATrueExpr) then + v.modelbuilder.warning(self, "useless-truism", "Warning: useless comparison to a Bool literal.") + end + if not mtype2 isa MNullType then return v.check_can_be_null(n_expr, mtype) diff --git a/tests/sav/warn_truism.res b/tests/sav/warn_truism.res new file mode 100644 index 0000000..7b485c1 --- /dev/null +++ b/tests/sav/warn_truism.res @@ -0,0 +1,4 @@ +warn_truism.nit:18,4--12: Warning: useless comparison to a Bool literal. +warn_truism.nit:19,9--18: Warning: useless comparison to a Bool literal. +warn_truism.nit:20,10--26: Warning: useless comparison to a Bool literal. +warn_truism.nit:20,33--41: Warning: useless comparison to a Bool literal. diff --git a/tests/warn_truism.nit b/tests/warn_truism.nit new file mode 100644 index 0000000..32e1e1d --- /dev/null +++ b/tests/warn_truism.nit @@ -0,0 +1,29 @@ +# This file is part of NIT ( http://www.nitlanguage.org ). +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import core::kernel + +var a = true +if a == true then end +var b = a != false +var c = ((a or b) == false) and b != true + +# only warn the common case (not those) +if true == a then end +if a == (true) then end + +# dont warn if operand 1 is not a bool +var o: nullable Bool = a +if o == true then end +if o or else false then end -- 1.7.9.5