Compare commits

..

1 Commits

Author SHA1 Message Date
81ed1e72b1 Исправления clazy 2020-04-19 09:52:35 +03:00
16 changed files with 108 additions and 287 deletions

View File

@ -1,248 +0,0 @@
#!/usr/bin/env python3
# ----------------------------------
# Options affecting listfile parsing
# ----------------------------------
with section("parse"):
# Specify structure for custom cmake functions
additional_commands = {
'add_doxygen': { 'flags' : [],
'kwargs': { 'LATEX': 1,
'HTML': 1,
'COMMENT': 1}},
'add_breathe': { 'flags' : [],
'kwargs': { 'COMMENT': 1}},
'add_common_library': { 'flags' : [],
'kwargs': { 'OUTPUT_NAME': 1,
'SOURCES': '*',
'TARGET': 1}},
'qt5_translation': { 'flags' : [],
'kwargs': { 'OUTPUT_DIR': 1,
'LANGUAGES': '*',
'SOURCES': '*',
'BASE_NAME': 1}},
'pvs_studio_add_target': { 'flags' : [ 'COMPILE_COMMANDS',
'OUTPUT',
'HIDE_HELP'],
'kwargs': { 'ARGS': '*',
'CONFIG': '*',
'DEPENDS': '*',
'FORMAT': '*',
'MODE': '*',
'TARGET': 1}},
'write_compiler_detection_header': { 'flags' : [],
'kwargs': { 'COMPILERS': '*',
'FEATURES': '*',
'FILE': '*',
'PREFIX': '*'}}}
# Specify variable tags.
vartags = []
# Specify property tags.
proptags = []
# -----------------------------
# Options affecting formatting.
# -----------------------------
with section("format"):
# How wide to allow formatted cmake files
line_width = 110
# How many spaces to tab for indent
tab_size = 2
# If an argument group contains more than this many sub-groups (parg or kwarg
# groups) then force it to a vertical layout.
max_subgroups_hwrap = 3
# If a positional argument group contains more than this many arguments, then
# force it to a vertical layout.
max_pargs_hwrap = 5
# If a cmdline positional group consumes more than this many lines without
# nesting, then invalidate the layout (and nest)
max_rows_cmdline = 2
# If true, separate flow control names from their parentheses with a space
separate_ctrl_name_with_space = False
# If true, separate function names from parentheses with a space
separate_fn_name_with_space = False
# If a statement is wrapped to more than one line, than dangle the closing
# parenthesis on its own line.
dangle_parens = False
# If the trailing parenthesis must be 'dangled' on its on line, then align it
# to this reference: `prefix`: the start of the statement, `prefix-indent`:
# the start of the statement, plus one indentation level, `child`: align to
# the column of the arguments
dangle_align = 'prefix'
# If the statement spelling length (including space and parenthesis) is
# smaller than this amount, then force reject nested layouts.
min_prefix_chars = 4
# If the statement spelling length (including space and parenthesis) is larger
# than the tab width by more than this amount, then force reject un-nested
# layouts.
max_prefix_chars = 2
# If a candidate layout is wrapped horizontally but it exceeds this many
# lines, then reject the layout.
max_lines_hwrap = 2
# What style line endings to use in the output.
line_ending = 'unix'
# Format command names consistently as 'lower' or 'upper' case
command_case = 'canonical'
# Format keywords consistently as 'lower' or 'upper' case
keyword_case = 'upper'
# A list of command names which should always be wrapped
always_wrap = []
# If true, the argument lists which are known to be sortable will be sorted
# lexicographicall
enable_sort = True
# If true, the parsers may infer whether or not an argument list is sortable
# (without annotation).
autosort = False
# By default, if cmake-format cannot successfully fit everything into the
# desired linewidth it will apply the last, most agressive attempt that it
# made. If this flag is True, however, cmake-format will print error, exit
# with non-zero status code, and write-out nothing
require_valid_layout = False
# A dictionary mapping layout nodes to a list of wrap decisions. See the
# documentation for more information.
layout_passes = {}
# ------------------------------------------------
# Options affecting comment reflow and formatting.
# ------------------------------------------------
with section("markup"):
# What character to use for bulleted lists
bullet_char = '*'
# What character to use as punctuation after numerals in an enumerated list
enum_char = '.'
# If comment markup is enabled, don't reflow the first comment block in each
# listfile. Use this to preserve formatting of your copyright/license
# statements.
first_comment_is_literal = False
# If comment markup is enabled, don't reflow any comment block which matches
# this (regex) pattern. Default is `None` (disabled).
literal_comment_pattern = None
# Regular expression to match preformat fences in comments default=
# ``r'^\s*([`~]{3}[`~]*)(.*)$'``
fence_pattern = '^\\s*([`~]{3}[`~]*)(.*)$'
# Regular expression to match rulers in comments default=
# ``r'^\s*[^\w\s]{3}.*[^\w\s]{3}$'``
ruler_pattern = '^\\s*[^\\w\\s]{3}.*[^\\w\\s]{3}$'
# If a comment line matches starts with this pattern then it is explicitly a
# trailing comment for the preceeding argument. Default is '#<'
explicit_trailing_pattern = '#<'
# If a comment line starts with at least this many consecutive hash
# characters, then don't lstrip() them off. This allows for lazy hash rulers
# where the first hash char is not separated by space
hashruler_min_length = 10
# If true, then insert a space between the first hash char and remaining hash
# chars in a hash ruler, and normalize its length to fill the column
canonicalize_hashrulers = True
# enable comment markup parsing and reflow
enable_markup = False
# ----------------------------
# Options affecting the linter
# ----------------------------
with section("lint"):
# a list of lint codes to disable
disabled_codes = ['C0113']
# regular expression pattern describing valid function names
function_pattern = '[0-9a-z_]+'
# regular expression pattern describing valid macro names
macro_pattern = '[0-9A-Z_]+'
# regular expression pattern describing valid names for variables with global
# scope
global_var_pattern = '[0-9A-Z][0-9A-Z_]+'
# regular expression pattern describing valid names for variables with global
# scope (but internal semantic)
internal_var_pattern = '_[0-9A-Z][0-9A-Z_]+'
# regular expression pattern describing valid names for variables with local
# scope
local_var_pattern = '[0-9a-z_]+'
# regular expression pattern describing valid names for privatedirectory
# variables
private_var_pattern = '_[0-9a-z_]+'
# regular expression pattern describing valid names for publicdirectory
# variables
public_var_pattern = '[0-9A-Z][0-9A-Z_]+'
# regular expression pattern describing valid names for keywords used in
# functions or macros
keyword_pattern = '[0-9A-Z_]+'
# In the heuristic for C0201, how many conditionals to match within a loop in
# before considering the loop a parser.
max_conditionals_custom_parser = 2
# Require at least this many newlines between statements
min_statement_spacing = 1
# Require no more than this many newlines between statements
max_statement_spacing = 2
max_returns = 6
max_branches = 12
max_arguments = 5
max_localvars = 15
max_statements = 50
# -------------------------------
# Options affecting file encoding
# -------------------------------
with section("encode"):
# If true, emit the unicode byte-order mark (BOM) at the start of the file
emit_byteorder_mark = False
# Specify the encoding of the input file. Defaults to utf-8
input_encoding = 'utf-8'
# Specify the encoding of the output file. Defaults to utf-8. Note that cmake
# only claims to support utf-8 so be careful when using anything else
output_encoding = 'utf-8'
# -------------------------------------
# Miscellaneous configurations options.
# -------------------------------------
with section("misc"):
# A dictionary containing any per-command configuration overrides. Currently
# only `command_case` is supported.
per_command = {}

View File

@ -1,7 +1,5 @@
include: include:
- project: 'f1x1t/gitlab-ci' - local: .gitlab-ci/scheduled.yml
ref: master
file: 'scheduled.yml'
smolensk15-nightly: smolensk15-nightly:
variables: variables:
@ -21,7 +19,3 @@ focal-nightly:
elbrus-nightly: elbrus-nightly:
extends: .scheduled-elbrus extends: .scheduled-elbrus
check-format-sources:
only:
- merge_requests
extends: .check-format-sources

78
.gitlab-ci/scheduled.yml Normal file
View File

@ -0,0 +1,78 @@
variables:
GIT_SUBMODULE_STRATEGY: recursive
GET_SOURCES_ATTEMPTS: 10
.scheduled-test:
only:
refs:
- schedules
cache:
paths: ['*.status']
before_script:
- >
if [ -f "${CI_JOB_NAME}.status" ]; then
if [ "$(cat ${CI_JOB_NAME}.status)" == "${CI_COMMIT_SHA}" ]; then
echo "=== Commit ${CI_COMMIT_SHORT_SHA} already tested with job ${CI_JOB_NAME} ==="
exit 0
fi
fi
- >
if [ -n "${UPDATE_CMD}" ]; then
${UPDATE_CMD}
fi
- >
if [ -n "${INSTALL_CMD}" ]; then
${INSTALL_CMD}
fi
script:
- >
if [ -f "${CI_JOB_NAME}.status" ]; then
if [ "$(cat ${CI_JOB_NAME}.status)" == "${CI_COMMIT_SHA}" ]; then
echo "=== Commit ${CI_COMMIT_SHORT_SHA} already tested with job ${CI_JOB_NAME} ==="
exit 0
fi
fi
- rm -f ${CI_JOB_NAME}.status
- mkdir build
- cd build
- cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=_output -DCPACK_PACKAGING_INSTALL_PREFIX=/opt/rtis ..
- ninja
- >
if [ -z "${CI_SHARED_ENVIRONMENT+x}" ]; then
ninja install
ninja package
ninja package_source
fi
- echo "${CI_COMMIT_SHA}" > "../${CI_JOB_NAME}.status"
artifacts:
paths:
- build/*.xz
- build/*.deb
when: on_success
expire_in: 10 days
.scheduled-smolensk15:
extends: .scheduled-test
image: smolensk15-dev
tags: ['docker']
.scheduled-orel212:
extends: .scheduled-test
image: orel212-dev
tags: ['docker']
.scheduled-bionic:
extends: .scheduled-test
image: bionic-dev
tags: ['docker']
.scheduled-focal:
extends: .scheduled-test
image: focal-dev
tags: ['docker']
.scheduled-elbrus:
extends: .scheduled-test
tags: ['elbrus']

3
.gitmodules vendored
View File

@ -7,6 +7,9 @@
[submodule "cmake/generators"] [submodule "cmake/generators"]
path = cmake/generators path = cmake/generators
url = https://git.246060.ru/f1x1t/cmake-generators.git url = https://git.246060.ru/f1x1t/cmake-generators.git
[submodule "cmake/doc"]
path = cmake/doc
url = https://git.246060.ru/f1x1t/cmake-doc.git
[submodule "cmake/etc/uncrustify"] [submodule "cmake/etc/uncrustify"]
path = cmake/etc/uncrustify path = cmake/etc/uncrustify
url = https://git.246060.ru/f1x1t/uncrustify-config.git url = https://git.246060.ru/f1x1t/uncrustify-config.git

View File

@ -1,27 +1,19 @@
# Минимальная версия CMake # Минимальная версия CMake
cmake_minimum_required(VERSION 3.6) cmake_minimum_required(VERSION 3.3)
# Предпочтительно следовать стандартам принятым в указанном диапазоне версий # Предпочтительно следовать стандартам принятым в указанном диапазоне версий
cmake_policy(VERSION 3.0.2..3.7) cmake_policy(VERSION 3.0.2..3.7)
# Название и версия проекта и используемые языки программирования # Название и версия проекта и используемые языки программирования
project(cmlib-example-clazy-fix VERSION 0.2.0 LANGUAGES C CXX) project(cmlib-example-app-qt5-con VERSION 0.2.0 LANGUAGES C CXX)
# Обязательные переменные
set(CMLIB_ORGANIZATION_NAME "ECS5" CACHE STRING "")
set(CMLIB_AUTHOR_NAME "Андрей Астафьев" CACHE STRING "")
set(CMLIB_AUTHOR_EMAIL "dev@246060.ru" CACHE STRING "")
set(CMLIB_DESCRIPTION "Пример проекта: статический анализ Clazy" CACHE STRING "")
# В каталоге cmake/cmlib находятся файлы с библиотечными функциями # В каталоге cmake/cmlib находятся файлы с библиотечными функциями
if(NOT DEFINED CMLIB_MAIN_DIR) if(IS_DIRECTORY ${CMAKE_SOURCE_DIR}/cmake/cmlib)
set(CMLIB_MAIN_DIR "${CMAKE_SOURCE_DIR}/cmake/cmlib") list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/cmlib)
endif()
if(IS_DIRECTORY "${CMLIB_MAIN_DIR}" AND EXISTS "${CMLIB_MAIN_DIR}/CMLibCommon.cmake")
list(INSERT CMAKE_MODULE_PATH 0 "${CMLIB_MAIN_DIR}")
else() else()
message(FATAL_ERROR "CMLib main directory ${CMLIB_MAIN_DIR} does not exists") message(FATAL_ERROR "CMake library directory does not exist")
endif() endif()
list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/find)
include(CMLibCommon) include(CMLibCommon)
@ -35,15 +27,14 @@ find_package(Boost 1.55.0 REQUIRED COMPONENTS headers)
find_package(Qt5 COMPONENTS Core REQUIRED) find_package(Qt5 COMPONENTS Core REQUIRED)
# Автоматически генерируемый заголовочный файл # Автоматически генерируемый заголовочный файл
cmlib_generate_private_config_hpp() cmlib_config_hpp_generate()
# Приложение # Приложение
add_subdirectory(src/cmlib-example) add_subdirectory(src/cmlib-example)
# Документация # Документация
add_breathe_target(doc-breathe) add_subdirectory(cmake/doc)
add_doxygen_target(doc-doxygen LATEX YES HTML YES)
# Создание вспомогательных символических ссылок # Создание вспомогательных символических ссылок
add_dependencies(cmlib-example-clazy-fix create_auxilary_symlinks) add_dependencies(cmlib-example-app-qt5-con create_auxilary_symlinks)

@ -1 +1 @@
Subproject commit 061327890c93ae2e96a63ac50f86e8df0ac14e12 Subproject commit b513e9b15b3d29fef99e8e9f1d83b235b93ed59e

1
cmake/doc Submodule

@ -0,0 +1 @@
Subproject commit acdfb6a9dd5ca1cb037e541f7da7033968873357

@ -1 +1 @@
Subproject commit e11d85f13317dcf3652988026ce1ef4dcbe72c68 Subproject commit 0cd764fc187ab3b66cb31a5549f13b3336858894

@ -1 +1 @@
Subproject commit 29faeeae1ac920e987aa6a6c16fff8f8f9f9a647 Subproject commit d0bc6e71e9c613eaaecca62eaf445d647f5216ed

View File

View File

@ -4,12 +4,14 @@
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="../src/cmlib-example/main.cpp" line="15"/>
<source>No</source> <source>No</source>
<translation type="vanished">Нет</translation> <translation>Нет</translation>
</message> </message>
<message> <message>
<location filename="../src/cmlib-example/main.cpp" line="17"/>
<source>Yes</source> <source>Yes</source>
<translation type="vanished">Да</translation> <translation>Да</translation>
</message> </message>
</context> </context>
</TS> </TS>

View File

@ -1,5 +1,5 @@
# Название основной цели и имя библиотеки в текущем каталоге # Название основной цели и имя библиотеки в текущем каталоге
set(TRGT cmlib-example-clazy-fix) set(TRGT cmlib-example-app-qt5-con)
# Список файлов исходных текстов # Список файлов исходных текстов
set(TRGT_cpp ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp) set(TRGT_cpp ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp)
@ -51,4 +51,4 @@ set_target_properties(${TRGT}
) )
# Правила для установки # Правила для установки
install(TARGETS ${TRGT} COMPONENT main RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) install(TARGETS ${TRGT} COMPONENT MAIN RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})

View File

@ -7,7 +7,7 @@
// function args by ref // function args by ref
int qStringToInt( QString s ) int qStringToInt( const QString &s )
{ {
return( s.toInt() ); return( s.toInt() );
} }
@ -20,34 +20,34 @@ int main( int argc, char** argv )
// qt-keywords // qt-keywords
QList< int > il; QList< int > il;
il << 111 << 222; il << 111 << 222;
foreach( int i, il ) Q_FOREACH( int i, il )
{ {
qDebug() << i; qDebug() << i;
} }
QStringList sl; QStringList sl;
// string allocations // string allocations
sl << "111" << "222"; sl << QStringLiteral("111") << QStringLiteral("222");
// loop add ref // loop add ref
for ( const auto& s: sl ) for ( const auto& s: qAsConst(sl) )
{ {
qDebug() << s; qDebug() << s;
} }
// loop qasconst // loop qasconst
for ( auto s: sl ) for ( auto s: qAsConst(sl) )
{ {
s.append( "0" ); s.append( "0" );
} }
// function args by ref // function args by ref
QString s { "100" }; QString s { QStringLiteral("100") };
auto ir = qStringToInt( s ); auto ir = qStringToInt( s );
// old style connect // old style connect
QFile f; QFile f;
FileSignalHandler fsh; FileSignalHandler fsh;
QObject::connect( &f, SIGNAL(aboutToClose()), &fsh, SLOT(process()) ); QObject::connect( &f, &QIODevice::aboutToClose, &fsh, &FileSignalHandler::process );
return( 0 ); return( 0 );
} // main } // main