diff options
author | Noel Grandin <noel.grandin@collabora.co.uk> | 2018-10-20 07:38:42 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2018-10-22 07:55:46 +0200 |
commit | b979e7181ff8c089b7809571791f7f287d01ae83 (patch) | |
tree | 659b9e39cde19d3e5fa418187893df93aeb89ac4 /compilerplugins/clang/singlevalfields.py | |
parent | 7ea01578eed8459678369d0256de016930b3af40 (diff) |
loplugin:singlevalfields look for fields that can be bool
Change-Id: Ief773b661a8378a10db56943b32127c7a2c86d11
Reviewed-on: https://gerrit.libreoffice.org/62037
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'compilerplugins/clang/singlevalfields.py')
-rwxr-xr-x | compilerplugins/clang/singlevalfields.py | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/compilerplugins/clang/singlevalfields.py b/compilerplugins/clang/singlevalfields.py index b842929011b1..7d42a0f6bbc6 100755 --- a/compilerplugins/clang/singlevalfields.py +++ b/compilerplugins/clang/singlevalfields.py @@ -5,6 +5,7 @@ import re import io definitionToSourceLocationMap = dict() # dict of tuple(parentClass, fieldName) to sourceLocation +definitionToTypeMap = dict() # dict of tuple(parentClass, fieldName) to field type fieldAssignDict = dict() # dict of tuple(parentClass, fieldName) to (set of values) # clang does not always use exactly the same numbers in the type-parameter vars it generates @@ -20,9 +21,11 @@ with io.open("workdir/loplugin.singlevalfields.log", "rb", buffering=1024*1024) if tokens[0] == "defn:": parentClass = normalizeTypeParams(tokens[1]) fieldName = normalizeTypeParams(tokens[2]) - sourceLocation = tokens[3] + fieldType = normalizeTypeParams(tokens[3]) + sourceLocation = tokens[4] fieldInfo = (parentClass, fieldName) definitionToSourceLocationMap[fieldInfo] = sourceLocation + definitionToTypeMap[fieldInfo] = fieldType elif tokens[0] == "asgn:": parentClass = normalizeTypeParams(tokens[1]) fieldName = normalizeTypeParams(tokens[2]) @@ -37,7 +40,10 @@ with io.open("workdir/loplugin.singlevalfields.log", "rb", buffering=1024*1024) else: print( "unknown line: " + line) +# look for stuff also has a single value tmp1list = list() +# look for things which have two values - zero and one +tmp2list = list() for fieldInfo, assignValues in fieldAssignDict.iteritems(): v0 = fieldInfo[0] + " " + fieldInfo[1] v1 = (",".join(assignValues)) @@ -45,7 +51,7 @@ for fieldInfo, assignValues in fieldAssignDict.iteritems(): if fieldInfo not in definitionToSourceLocationMap: continue v2 = definitionToSourceLocationMap[fieldInfo] - if len(assignValues) != 1: + if len(assignValues) > 2: continue if "?" in assignValues: continue @@ -75,13 +81,20 @@ for fieldInfo, assignValues in fieldAssignDict.iteritems(): # Some of our supported compilers don't do constexpr, which means o3tl::typed_flags can't be 'static const' if containingClass in ["WaitWindow_Impl"]: continue - tmp1list.append((v0,v1,v2)) + if len(assignValues) == 2: + if "0" in assignValues and "1" in assignValues: + fieldType = definitionToTypeMap[fieldInfo] + if not "_Bool" in fieldType and not "enum " in fieldType and not "boolean" in fieldType: + tmp2list.append((v0,v1,v2,fieldType)) + else: + tmp1list.append((v0,v1,v2)) # sort results by filename:lineno def natural_sort_key(s, _nsre=re.compile('([0-9]+)')): return [int(text) if text.isdigit() else text.lower() for text in re.split(_nsre, s)] tmp1list.sort(key=lambda v: natural_sort_key(v[2])) +tmp2list.sort(key=lambda v: natural_sort_key(v[2])) # print out the results with open("compilerplugins/clang/singlevalfields.results", "wt") as f: @@ -89,5 +102,10 @@ with open("compilerplugins/clang/singlevalfields.results", "wt") as f: f.write(v[2] + "\n") f.write(" " + v[0] + "\n") f.write(" " + v[1] + "\n") +with open("compilerplugins/clang/singlevalfields.could-be-bool.results", "wt") as f: + for v in tmp2list: + f.write(v[2] + "\n") + f.write(" " + v[0] + "\n") + f.write(" " + v[3] + "\n") |