[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2 1/2] xen/cppcheck: add a way to exclude files from the scan
On Thu, 2 Mar 2023, Luca Fancellu wrote: > >> +Exclude file list for xen-analysis script > >> +========================================= > >> + > >> +The code analysis is performed on the Xen codebase for both MISRA > >> checkers and > >> +static analysis checkers, there are some files however that needs to be > >> removed > >> +from the findings report because they are not owned by Xen and they must > >> be kept > >> +in sync with their origin (completely or even partially), hence we can't > >> easily > >> +fix findings or deviate from them. > > > > I would stay more generic and say something like: > > > > The code analysis is performed on the Xen codebase for both MISRA > > checkers and static analysis checkers, there are some files however that > > needs to be removed from the findings report for various reasons (e.g. > > they are imported from external sources, they generate too many false > > positive results, etc.). > > > > But what you wrote is also OK. > > I’m ok with that too, I can update with your wordings > >> > >> +++ b/xen/scripts/xen_analysis/exclusion_file_list.py > >> @@ -0,0 +1,79 @@ > >> +#!/usr/bin/env python3 > >> + > >> +import os, glob, json > >> +from . import settings > >> + > >> +class ExclusionFileListError(Exception): > >> + pass > >> + > >> + > >> +def __cppcheck_path_exclude_syntax(path): > >> + # Prepending * to the relative path to match every path where the Xen > >> + # codebase could be > >> + path = "*" + path > >> + > >> + # Check if the path is to a folder without the wildcard at the end > >> + if not (path.endswith(".c") or path.endswith(".h") or > >> path.endswith("*")): > > > > Isn't there a python call to check that it is actually a folder? I think > > that would be more resilient because otherwise if someone passes a .S or > > .cpp file it would be detected as directory. > > > > > >> + # The path is to a folder, if it doesn't have the final /, add it > >> + if not path.endswith("/"): > >> + path = path + "/" > >> + # Since the path is a folder, add a wildcard to the end so that > >> + # cppcheck will remove every issue related with this path > >> + path = path + "*" > >> + > >> + return path > > Yes you are very right, here I wanted to accept the relative path to a folder > with > or without the ending '/*’, but it carries on much more complexity because > here the > relative path can contain wildcards in it, so we can’t use os.path.isdir() > which would > fail. > > At cost of being more strict on how folders shall be declared, I think it’s > better to > enforce the ‘/*’ at the end of a path that is excluding a folder. > > We have a previous check using glob() to ensure path with wildcards are real > path > so we are safe that the passed relative path are OK. > > Dropping the requirement of passing folder paths with or without the ‘/*’ > simplifies > the code and this would be the final result: > > > diff --git a/docs/misra/exclude-list.rst b/docs/misra/exclude-list.rst > index 969539c46beb..c97431a86120 100644 > --- a/docs/misra/exclude-list.rst > +++ b/docs/misra/exclude-list.rst > @@ -3,11 +3,11 @@ > Exclude file list for xen-analysis script > ========================================= > > -The code analysis is performed on the Xen codebase for both MISRA checkers > and > -static analysis checkers, there are some files however that needs to be > removed > -from the findings report because they are not owned by Xen and they must be > kept > -in sync with their origin (completely or even partially), hence we can't > easily > -fix findings or deviate from them. > +The code analysis is performed on the Xen codebase for both MISRA > +checkers and static analysis checkers, there are some files however that > +needs to be removed from the findings report for various reasons (e.g. > +they are imported from external sources, they generate too many false > +positive results, etc.). > > For this reason the file docs/misra/exclude-list.json is used to exclude > every > entry listed in that file from the final report. > @@ -42,3 +42,5 @@ Here is an explanation of the fields inside an object of > the "content" array: > > To ease the review and the modifications of the entries, they shall be > listed in > alphabetical order referring to the rel_path field. > +Excluded folder paths shall end with '/*' in order to match everything on > that > +folder. > diff --git a/xen/scripts/xen_analysis/exclusion_file_list.py > b/xen/scripts/xen_analysis/exclusion_file_list.py > index 4a47a90f5944..871e480586bb 100644 > --- a/xen/scripts/xen_analysis/exclusion_file_list.py > +++ b/xen/scripts/xen_analysis/exclusion_file_list.py > @@ -12,15 +12,6 @@ def __cppcheck_path_exclude_syntax(path): > # codebase could be > path = "*" + path > > - # Check if the path is to a folder without the wildcard at the end > - if not (path.endswith(".c") or path.endswith(".h") or > path.endswith("*")): > - # The path is to a folder, if it doesn't have the final /, add it > - if not path.endswith("/"): > - path = path + "/" > - # Since the path is a folder, add a wildcard to the end so that > - # cppcheck will remove every issue related with this path > - path = path + "*" > - > return path > > > I’ve included also your wording and I’ve specified in the docs how to exclude > a folder. > > Do you think it’s ok to proceed in this way? Yes I think that's fine. I like that the python script becomes simpler
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |