From 42072cc7c574d4b5b0072f00fe14c846e0f62e56 Mon Sep 17 00:00:00 2001 From: Markus Hofbauer Date: Thu, 12 May 2022 13:58:32 +0200 Subject: [PATCH] apply python format --- build.py | 14 +- conanfile.py | 53 +++-- docs/conf.py | 614 +++++++++++++++++++++++++++++++++++---------------- 3 files changed, 468 insertions(+), 213 deletions(-) diff --git a/build.py b/build.py index c733eb38..c397b944 100644 --- a/build.py +++ b/build.py @@ -31,16 +31,14 @@ from cpt.packager import ConanMultiPackager if __name__ == "__main__": builder = ConanMultiPackager( # package id - channel = "testing", - stable_branch_pattern = r"v\d+\.\d+\.\d+.*", - + channel="testing", + stable_branch_pattern=r"v\d+\.\d+\.\d+.*", # dependencies - build_policy = ["mp-units", "outdated"], - upload_dependencies = "all", - pip_install = ["sphinx", "recommonmark", "breathe"], - + build_policy=["mp-units", "outdated"], + upload_dependencies="all", + pip_install=["sphinx", "recommonmark", "breathe"], # build configurations - archs = ["x86_64"], # limit to 64-bit only + archs=["x86_64"], # limit to 64-bit only ) builder.add_common_builds(pure_c=True) for settings, options, env_vars, build_requires, reference in builder.items: diff --git a/conanfile.py b/conanfile.py index 76021ceb..1f5d68de 100644 --- a/conanfile.py +++ b/conanfile.py @@ -24,7 +24,10 @@ from conan import ConanFile from conan.tools.cmake import CMakeToolchain, CMakeDeps, CMake from conan.tools.files import copy, load, rmdir from conan.tools.scm import Version -from conans.tools import get_env, check_min_cppstd # TODO replace with new tools for Conan 2.0 +from conans.tools import ( + get_env, + check_min_cppstd, +) # TODO replace with new tools for Conan 2.0 import os, re required_conan_version = ">=1.48.0" @@ -50,19 +53,18 @@ class MPUnitsConan(ConanFile): license = "MIT" url = "https://github.com/mpusz/units" settings = "os", "compiler", "build_type", "arch" - requires = ( - "gsl-lite/0.40.0" - ) - options = { - "downcast_mode": ["off", "on", "auto"], - "build_docs": [True, False] - } - default_options = { - "downcast_mode": "on", - "build_docs": True - } + requires = "gsl-lite/0.40.0" + options = {"downcast_mode": ["off", "on", "auto"], "build_docs": [True, False]} + default_options = {"downcast_mode": "on", "build_docs": True} exports = ["LICENSE.md"] - exports_sources = ["docs/*", "src/*", "test/*", "cmake/*", "example/*", "CMakeLists.txt"] + exports_sources = [ + "docs/*", + "src/*", + "test/*", + "cmake/*", + "example/*", + "CMakeLists.txt", + ] no_copy_source = True generators = "cmake_paths" @@ -74,9 +76,9 @@ class MPUnitsConan(ConanFile): def _use_libfmt(self): compiler = self.settings.compiler version = Version(self.settings.compiler.version) - std_support = \ - (compiler == "Visual Studio" and version >= 17 and compiler.cppstd == 23) or \ - (compiler == "msvc" and version >= 193 and compiler.cppstd == 23) + std_support = ( + compiler == "Visual Studio" and version >= 17 and compiler.cppstd == 23 + ) or (compiler == "msvc" and version >= 193 and compiler.cppstd == 23) return not std_support @property @@ -95,7 +97,9 @@ class MPUnitsConan(ConanFile): def set_version(self): content = load(self, os.path.join(self.recipe_folder, "src/CMakeLists.txt")) - version = re.search(r"project\([^\)]+VERSION (\d+\.\d+\.\d+)[^\)]*\)", content).group(1) + version = re.search( + r"project\([^\)]+VERSION (\d+\.\d+\.\d+)[^\)]*\)", content + ).group(1) self.version = version.strip() def requirements(self): @@ -124,10 +128,14 @@ class MPUnitsConan(ConanFile): raise ConanInvalidConfiguration("mp-units requires at least clang++-12") elif compiler == "apple-clang": if version < 13: - raise ConanInvalidConfiguration("mp-units requires at least AppleClang 13") + raise ConanInvalidConfiguration( + "mp-units requires at least AppleClang 13" + ) elif compiler == "Visual Studio": if version < 16: - raise ConanInvalidConfiguration("mp-units requires at least Visual Studio 16.9") + raise ConanInvalidConfiguration( + "mp-units requires at least Visual Studio 16.9" + ) elif compiler == "msvc": if self._msvc_version < 1928: raise ConanInvalidConfiguration("mp-units requires at least MSVC 19.28") @@ -162,7 +170,12 @@ class MPUnitsConan(ConanFile): self.info.header_only() def package(self): - copy(self, "LICENSE.md", self.source_folder, os.path.join(self.package_folder, "licenses")) + copy( + self, + "LICENSE.md", + self.source_folder, + os.path.join(self.package_folder, "licenses"), + ) cmake = CMake(self) cmake.install() rmdir(self, os.path.join(self.package_folder, "lib", "cmake")) diff --git a/docs/conf.py b/docs/conf.py index 382ae080..1dbe5187 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -12,152 +12,311 @@ import re import sphinx_rtd_theme -from pygments.lexer import RegexLexer, include, bygroups, using, \ - this, inherit, default, words +from pygments.lexer import ( + RegexLexer, + include, + bygroups, + using, + this, + inherit, + default, + words, +) from pygments.util import get_bool_opt -from pygments.token import Text, Comment, Operator, Keyword, Name, String, \ - Number, Punctuation, Error +from pygments.token import ( + Text, + Comment, + Operator, + Keyword, + Name, + String, + Number, + Punctuation, + Error, +) from sphinx.highlighting import lexers + class MyCFamilyLexer(RegexLexer): #: optional Comment or Whitespace - _ws = r'(?:\s|//.*?\n|/[*].*?[*]/)+' + _ws = r"(?:\s|//.*?\n|/[*].*?[*]/)+" # The trailing ?, rather than *, avoids a geometric performance drop here. #: only one /* */ style comment - _ws1 = r'\s*(?:/[*].*?[*]/\s*)?' + _ws1 = r"\s*(?:/[*].*?[*]/\s*)?" tokens = { - 'whitespace': [ + "whitespace": [ # preprocessor directives: without whitespace - (r'^#if\s+0', Comment.Preproc, 'if0'), - ('^#', Comment.Preproc, 'macro'), + (r"^#if\s+0", Comment.Preproc, "if0"), + ("^#", Comment.Preproc, "macro"), # or with whitespace - ('^(' + _ws1 + r')(#if\s+0)', - bygroups(using(this), Comment.Preproc), 'if0'), - ('^(' + _ws1 + ')(#)', - bygroups(using(this), Comment.Preproc), 'macro'), - (r'\n', Text), - (r'\s+', Text), - (r'\\\n', Text), # line continuation - (r'//(\n|[\w\W]*?[^\\]\n)', Comment.Single), - (r'/(\\\n)?[*][\w\W]*?[*](\\\n)?/', Comment.Multiline), + ( + "^(" + _ws1 + r")(#if\s+0)", + bygroups(using(this), Comment.Preproc), + "if0", + ), + ("^(" + _ws1 + ")(#)", bygroups(using(this), Comment.Preproc), "macro"), + (r"\n", Text), + (r"\s+", Text), + (r"\\\n", Text), # line continuation + (r"//(\n|[\w\W]*?[^\\]\n)", Comment.Single), + (r"/(\\\n)?[*][\w\W]*?[*](\\\n)?/", Comment.Multiline), # Open until EOF, so no ending delimeter - (r'/(\\\n)?[*][\w\W]*', Comment.Multiline), + (r"/(\\\n)?[*][\w\W]*", Comment.Multiline), ], - 'statements': [ - (r'(L?)(")', bygroups(String.Affix, String), 'string'), - (r"(L?)(')(\\.|\\[0-7]{1,3}|\\x[a-fA-F0-9]{1,2}|[^\\\'\n])(')", - bygroups(String.Affix, String.Char, String.Char, String.Char)), - (r'\*/', Error), - (r'[~!%^&*+=|?:<>/-]', Operator), - (r'[()\[\],.]', Punctuation), - (words(('asm', 'auto', 'break', 'case', 'const', 'continue', - 'default', 'do', 'else', 'enum', 'extern', 'for', 'goto', - 'if', 'register', 'restricted', 'return', 'sizeof', - 'static', 'struct', 'switch', 'typedef', 'union', - 'volatile', 'while'), - suffix=r'\b'), Keyword), - (r'(bool|int|long|float|short|double|char|unsigned|signed|void)\b', - Keyword.Type), - (words(('inline', '_inline', '__inline', 'naked', 'restrict', - 'thread', 'typename'), suffix=r'\b'), Keyword.Reserved), + "statements": [ + (r'(L?)(")', bygroups(String.Affix, String), "string"), + ( + r"(L?)(')(\\.|\\[0-7]{1,3}|\\x[a-fA-F0-9]{1,2}|[^\\\'\n])(')", + bygroups(String.Affix, String.Char, String.Char, String.Char), + ), + (r"\*/", Error), + (r"[~!%^&*+=|?:<>/-]", Operator), + (r"[()\[\],.]", Punctuation), + ( + words( + ( + "asm", + "auto", + "break", + "case", + "const", + "continue", + "default", + "do", + "else", + "enum", + "extern", + "for", + "goto", + "if", + "register", + "restricted", + "return", + "sizeof", + "static", + "struct", + "switch", + "typedef", + "union", + "volatile", + "while", + ), + suffix=r"\b", + ), + Keyword, + ), + ( + r"(bool|int|long|float|short|double|char|unsigned|signed|void)\b", + Keyword.Type, + ), + ( + words( + ( + "inline", + "_inline", + "__inline", + "naked", + "restrict", + "thread", + "typename", + ), + suffix=r"\b", + ), + Keyword.Reserved, + ), # Vector intrinsics - (r'(__m(128i|128d|128|64))\b', Keyword.Reserved), + (r"(__m(128i|128d|128|64))\b", Keyword.Reserved), # Microsoft-isms - (words(( - 'asm', 'int8', 'based', 'except', 'int16', 'stdcall', 'cdecl', - 'fastcall', 'int32', 'declspec', 'finally', 'int64', 'try', - 'leave', 'wchar_t', 'w64', 'unaligned', 'raise', 'noop', - 'identifier', 'forceinline', 'assume'), - prefix=r'__', suffix=r'\b'), Keyword.Reserved), - (r'(true|false|NULL)\b', Name.Builtin), - (r'([a-zA-Z_]\w*)(\s*)(:)(?!:)', bygroups(Name.Label, Text, Punctuation)), - (r'[a-zA-Z_]\w*', Name), + ( + words( + ( + "asm", + "int8", + "based", + "except", + "int16", + "stdcall", + "cdecl", + "fastcall", + "int32", + "declspec", + "finally", + "int64", + "try", + "leave", + "wchar_t", + "w64", + "unaligned", + "raise", + "noop", + "identifier", + "forceinline", + "assume", + ), + prefix=r"__", + suffix=r"\b", + ), + Keyword.Reserved, + ), + (r"(true|false|NULL)\b", Name.Builtin), + (r"([a-zA-Z_]\w*)(\s*)(:)(?!:)", bygroups(Name.Label, Text, Punctuation)), + (r"[a-zA-Z_]\w*", Name), ], - 'root': [ - include('whitespace'), + "root": [ + include("whitespace"), # functions - (r'((?:[\w*\s])+?(?:\s|[*]))' # return arguments - r'([a-zA-Z_]\w*)' # method name - r'(\s*\([^;]*?\))' # signature - r'([^;{]*)(\{)', - bygroups(using(this), Name.Function, using(this), using(this), - Punctuation), - 'function'), + ( + r"((?:[\w*\s])+?(?:\s|[*]))" # return arguments + r"([a-zA-Z_]\w*)" # method name + r"(\s*\([^;]*?\))" # signature + r"([^;{]*)(\{)", + bygroups( + using(this), Name.Function, using(this), using(this), Punctuation + ), + "function", + ), # function declarations - (r'((?:[\w*\s])+?(?:\s|[*]))' # return arguments - r'([a-zA-Z_]\w*)' # method name - r'(\s*\([^;]*?\))' # signature - r'([^;]*)(;)', - bygroups(using(this), Name.Function, using(this), using(this), - Punctuation)), - default('statement'), + ( + r"((?:[\w*\s])+?(?:\s|[*]))" # return arguments + r"([a-zA-Z_]\w*)" # method name + r"(\s*\([^;]*?\))" # signature + r"([^;]*)(;)", + bygroups( + using(this), Name.Function, using(this), using(this), Punctuation + ), + ), + default("statement"), ], - 'statement': [ - include('whitespace'), - include('statements'), - ('[{}]', Punctuation), - (';', Punctuation, '#pop'), + "statement": [ + include("whitespace"), + include("statements"), + ("[{}]", Punctuation), + (";", Punctuation, "#pop"), ], - 'function': [ - include('whitespace'), - include('statements'), - (';', Punctuation), - (r'\{', Punctuation, '#push'), - (r'\}', Punctuation, '#pop'), + "function": [ + include("whitespace"), + include("statements"), + (";", Punctuation), + (r"\{", Punctuation, "#push"), + (r"\}", Punctuation, "#pop"), ], - 'string': [ - (r'"', String, '#pop'), - (r'\\([\\abfnrtv"\']|x[a-fA-F0-9]{2,4}|' - r'u[a-fA-F0-9]{4}|U[a-fA-F0-9]{8}|[0-7]{1,3})', String.Escape), + "string": [ + (r'"', String, "#pop"), + ( + r'\\([\\abfnrtv"\']|x[a-fA-F0-9]{2,4}|' + r"u[a-fA-F0-9]{4}|U[a-fA-F0-9]{8}|[0-7]{1,3})", + String.Escape, + ), (r'[^\\"\n]+', String), # all other characters - (r'\\\n', String), # line continuation - (r'\\', String), # stray backslash + (r"\\\n", String), # line continuation + (r"\\", String), # stray backslash ], - 'macro': [ - (r'(include)(' + _ws1 + r')([^\n]+)', - bygroups(Comment.Preproc, Text, Comment.PreprocFile)), - (r'[^/\n]+', Comment.Preproc), - (r'/[*](.|\n)*?[*]/', Comment.Multiline), - (r'//.*?\n', Comment.Single, '#pop'), - (r'/', Comment.Preproc), - (r'(?<=\\)\n', Comment.Preproc), - (r'\n', Comment.Preproc, '#pop'), + "macro": [ + ( + r"(include)(" + _ws1 + r")([^\n]+)", + bygroups(Comment.Preproc, Text, Comment.PreprocFile), + ), + (r"[^/\n]+", Comment.Preproc), + (r"/[*](.|\n)*?[*]/", Comment.Multiline), + (r"//.*?\n", Comment.Single, "#pop"), + (r"/", Comment.Preproc), + (r"(?<=\\)\n", Comment.Preproc), + (r"\n", Comment.Preproc, "#pop"), + ], + "if0": [ + (r"^\s*#if.*?(?)', Text, '#pop'), + (r"\s*(?=>)", Text, "#pop"), ], } def analyse_text(text): - if re.search('#include <[a-z_]+>', text): + if re.search("#include <[a-z_]+>", text): return 0.2 - if re.search('using namespace ', text): + if re.search("using namespace ", text): return 0.4 -lexers['cpp'] = MyCppLexer(startinline=True) + +lexers["cpp"] = MyCppLexer(startinline=True) # TODO Remove the above when Pygments release with fixes is available @@ -243,11 +484,14 @@ lexers['cpp'] = MyCppLexer(startinline=True) import subprocess, os, re + def get_version(): try: - with open('../src/CMakeLists.txt', 'r') as file: + with open("../src/CMakeLists.txt", "r") as file: content = file.read() - version = re.search(r"project\([^\)]+VERSION (\d+\.\d+\.\d+)[^\)]*\)", content).group(1) + version = re.search( + r"project\([^\)]+VERSION (\d+\.\d+\.\d+)[^\)]*\)", content + ).group(1) return version.strip() except Exception: return None @@ -255,9 +499,9 @@ def get_version(): # -- Project information ----------------------------------------------------- -project = 'mp-units' -copyright = '2018-present, Mateusz Pusz' -author = 'Mateusz Pusz' +project = "mp-units" +copyright = "2018-present, Mateusz Pusz" +author = "Mateusz Pusz" # The major project version, used as the replacement for |version|. version = get_version() @@ -270,21 +514,21 @@ release = get_version() # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ - 'sphinx.ext.autosectionlabel', - 'sphinx.ext.githubpages', - 'sphinx.ext.graphviz', - 'sphinx_rtd_theme', - 'recommonmark', - 'breathe' + "sphinx.ext.autosectionlabel", + "sphinx.ext.githubpages", + "sphinx.ext.graphviz", + "sphinx_rtd_theme", + "recommonmark", + "breathe", ] # Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] +templates_path = ["_templates"] # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This pattern also affects html_static_path and html_extra_path. -exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] +exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] # If true, Sphinx will warn about all references where the target cannot # be found. Default is False. @@ -305,29 +549,29 @@ autosectionlabel_prefix_document = True # The name of the default domain. Can also be None to disable a default # domain. The default is 'py'. -primary_domain = 'cpp' +primary_domain = "cpp" # The reST default role (used for this markup: `text`) to use for all documents. -default_role = 'cpp:any' +default_role = "cpp:any" # The default language to highlight source code in. The default is 'python3'. # The value should be a valid Pygments lexer name (https://pygments.org/docs/lexers). -highlight_language = 'cpp' +highlight_language = "cpp" # The style name to use for Pygments highlighting of source code. If not set, # either the theme’s default style or 'sphinx' is selected for HTML output. -pygments_style = 'default' +pygments_style = "default" # A list of prefixes that will be ignored when sorting C++ objects in the global # index. For example ['awesome_lib::']. -cpp_index_common_prefix = ['units::'] +cpp_index_common_prefix = ["units::"] # -- Options for HTML output ------------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. -html_theme = 'sphinx_rtd_theme' +html_theme = "sphinx_rtd_theme" # A dictionary of options that influence the look and feel of the selected theme. # These are theme-specific. @@ -339,7 +583,7 @@ html_theme_options = { # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] +html_static_path = ["_static"] # If given, this must be the name of an image file (path relative to the # configuration directory) that is the logo of the docs. It is placed at the @@ -349,45 +593,45 @@ html_static_path = ['_static'] # These paths are either relative to html_static_path or fully qualified # paths (eg. https://...) -html_css_files = [ - 'css/custom.css' -] +html_css_files = ["css/custom.css"] # -- Breathe configuration --------------------------------------------------- + def configureDoxyfile(input_dir, output_dir): - with open('Doxyfile.in', 'r') as file: + with open("Doxyfile.in", "r") as file: filedata = file.read() - filedata = filedata.replace('@DOXYGEN_INPUT_DIR@', input_dir) - filedata = filedata.replace('@DOXYGEN_OUTPUT_DIR@', output_dir) + filedata = filedata.replace("@DOXYGEN_INPUT_DIR@", input_dir) + filedata = filedata.replace("@DOXYGEN_OUTPUT_DIR@", output_dir) - with open('Doxyfile', 'w') as file: + with open("Doxyfile", "w") as file: file.write(filedata) + # Check if we're running on Read the Docs' servers -read_the_docs_build = os.environ.get('READTHEDOCS', None) == 'True' +read_the_docs_build = os.environ.get("READTHEDOCS", None) == "True" # This should be a dictionary in which the keys are project names and the values # are paths to the folder containing the doxygen output for that project. breathe_projects = {} if read_the_docs_build: - input_dir = '../src' - output_dir = 'build' + input_dir = "../src" + output_dir = "build" configureDoxyfile(input_dir, output_dir) - subprocess.call('doxygen', shell=True) - breathe_projects['mp-units'] = output_dir + '/xml' + subprocess.call("doxygen", shell=True) + breathe_projects["mp-units"] = output_dir + "/xml" # This should match one of the keys in the breathe_projects dictionary and # indicates which project should be used when the project is not specified on # the directive. -breathe_default_project = 'mp-units' +breathe_default_project = "mp-units" # Allows you to specify domains for particular files according to their extension. -breathe_domain_by_extension = {"h" : "cpp"} +breathe_domain_by_extension = {"h": "cpp"} # Provides the directive flags that should be applied to all directives which # take :members:, :private-members: and :undoc-members: options. By default, # this is set to an empty list, which means no members are displayed. -breathe_default_members = ('members', ) +breathe_default_members = ("members",)