「clang-modernize」の版間の差分

提供: C++入門
移動: 案内検索
(ページの作成:「clang-modernize とは、C++98 と C++03 のコードを C++11 に変換するためのツールです。 '''読み方''' ;clang-modernize:くらんぐ も...」)
 
 
行24: 行24:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
== 実行例 ==
 
== 実行例 ==
 +
=== コマンドラインオプション ===
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 +
$ clang-modernize-3.5 -help
 +
USAGE: clang-modernize-3.5 [options] [<sources>...]
 +
 +
OPTIONS:
 +
 +
Formatting Options:
 +
 +
  -format                    - Enable formatting of code changed by applying replacements.
 +
                              Use -style to choose formatting style.
 +
  -style=<string>            - Coding style, currently supports:
 +
                                LLVM, Google, Chromium, Mozilla, WebKit.
 +
                              Use -style=file to load style configuration from
 +
                              .clang-format file located in one of the parent
 +
                              directories of the source file (or current
 +
                              directory for stdin).
 +
                              Use -style="{key: value, ...}" to set specific
 +
                              parameters, e.g.:
 +
                                -style="{BasedOnStyle: llvm, IndentWidth: 8}"
 +
  -style-config=<string>    - Path to a directory containing a .clang-format file
 +
                              describing a formatting style to use for formatting
 +
                              code when -style=file.
 +
 +
Inclusion/Exclusion Options:
 +
 +
  -exclude=<string>          - Comma-separated list of paths that can not be transformed
 +
  -exclude-from=<filename>  - File containing a list of paths that can not be transformed
 +
  -include=<string>          - Comma-separated list of paths to consider to be transformed
 +
  -include-from=<filename>  - File containing a list of paths to consider to be transformed
 +
 +
Modernizer Options:
 +
 +
  -final-syntax-check        - Check for correct syntax after applying transformations
 +
  -for-compilers=<string>    - Select transforms targeting the intersection of
 +
                              language features supported by the given compilers.
 +
                              Takes a comma-separated list of <compiler>-<version>.
 +
                              <compiler> can be any of: clang, gcc, icc, msvc
 +
                              <version> is <major>[.<minor>]
 +
  -help                      - Display available options (-help-hidden for more)
 +
  -help-list                - Display list of available options (-help-list-hidden for more)
 +
  -perf=<directory name>    - Capture performance data and output to specified directory. Default: ./migrate_perf
 +
  -risk                      - Select a maximum risk level:
 +
    =safe                    -  Only safe transformations
 +
    =reasonable              -  Enable transformations that might change semantics (default)
 +
    =risky                  -  Enable transformations that are likely to change semantics
 +
  -summary                  - Print transform summary
 +
  -version                  - Display the version of this program
 +
 +
Serialization Options:
 +
 +
  -serialize-dir=<string>    - Path to an existing directory in which to write
 +
                              serialized replacements. Default behaviour is to
 +
                              write to a temporary directory.
 +
  -serialize-replacements    - Serialize translation unit replacements to disk instead of changing files.
 +
 +
Transforms:
 +
 +
  -add-override              - Make use of override specifier where possible
 +
  -loop-convert              - Make use of range-based for loops where possible
 +
  -pass-by-value            - Pass parameters by value where possible
 +
  -replace-auto_ptr          - Replace std::auto_ptr (deprecated) by std::unique_ptr (EXPERIMENTAL)
 +
  -use-auto                  - Use of 'auto' type specifier
 +
  -use-nullptr              - Make use of nullptr keyword where possible
 +
 +
Transforms' options:
 +
 +
  -override-macros          - Detect and use macros that expand to the 'override' keyword.
 +
  -user-null-macros=<string> - Comma-separated list of user-defined macro names that behave like NULL
 +
 +
-p <build-path> is used to read a compile command database.
 +
 +
For example, it can be a CMake build directory in which a file named
 +
compile_commands.json exists (use -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
 +
CMake option to get this output). When no build path is specified,
 +
a search for compile_commands.json will be attempted through all
 +
parent paths of the first input file . See:
 +
http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html for an
 +
example of setting up Clang Tooling on a source tree.
 +
 +
<source0> ... specify the paths of source files. These paths are
 +
looked up in the compile command database. If the path of a file is
 +
absolute, it needs to point into CMake's source tree. If the path is
 +
relative, the current working directory needs to be in the CMake
 +
source tree and the file must be in a subdirectory of the current
 +
working directory. "./" prefixes in the relative files will be
 +
automatically removed, but the rest of a relative path must be a
 +
suffix of a path in the compile command database.
 +
 +
EXAMPLES:
 +
 +
Apply all transforms on a file that doesn't require compilation arguments:
 +
 +
  clang-modernize file.cpp
 +
 +
Convert for loops to ranged-based for loops for all files in the compilation
 +
database that belong in a project subtree and then reformat the code
 +
automatically using the LLVM style:
 +
 +
    clang-modernize -p build/path -include project/path -format -loop-convert
 +
 +
Make use of both nullptr and the override specifier, using git ls-files:
 +
 +
  git ls-files '*.cpp' | xargs -I{} clang-modernize -p build/path \
 +
      -use-nullptr -add-override -override-macros {}
 +
 +
Apply all transforms supported by both clang >= 3.0 and gcc >= 4.7 to
 +
foo.cpp and any included headers in bar:
 +
 +
  clang-modernize -for-compilers=clang-3.0,gcc-4.7 foo.cpp \
 +
      -include bar -- -std=c++11 -Ibar
 
</syntaxhighlight>
 
</syntaxhighlight>
 
== 関連項目 ==
 
== 関連項目 ==

2015年2月22日 (日) 15:11時点における最新版

clang-modernize とは、C++98 と C++03 のコードを C++11 に変換するためのツールです。

読み方

clang-modernize
くらんぐ もだんないず

概要

clang-modernizeは、古い標準で書かれたC++コードを新しいC++標準の機能を使用して、自動的に変換するスタンドアローンのツールです。

  • range-based for の変換
  • nullptr を利用する変換
  • auto を利用する変換
  • 派生先仮想関数への override 付与 add-override
  • コンストラクタ引数で値渡し(pass by value)
  • std::auto_ptrのリプレイス

インストール

clang-modernize 3.5

sudo apt install clang-modernize-3.5

clang-modernize 3.4

sudo apt install clang-modernize-3.4

実行例

コマンドラインオプション

$ clang-modernize-3.5 -help
USAGE: clang-modernize-3.5 [options] [<sources>...]
 
OPTIONS:
 
Formatting Options:
 
  -format                    - Enable formatting of code changed by applying replacements.
                               Use -style to choose formatting style.
  -style=<string>            - Coding style, currently supports:
                                 LLVM, Google, Chromium, Mozilla, WebKit.
                               Use -style=file to load style configuration from
                               .clang-format file located in one of the parent
                               directories of the source file (or current
                               directory for stdin).
                               Use -style="{key: value, ...}" to set specific
                               parameters, e.g.:
                                 -style="{BasedOnStyle: llvm, IndentWidth: 8}"
  -style-config=<string>     - Path to a directory containing a .clang-format file
                               describing a formatting style to use for formatting
                               code when -style=file.
 
Inclusion/Exclusion Options:
 
  -exclude=<string>          - Comma-separated list of paths that can not be transformed
  -exclude-from=<filename>   - File containing a list of paths that can not be transformed
  -include=<string>          - Comma-separated list of paths to consider to be transformed
  -include-from=<filename>   - File containing a list of paths to consider to be transformed
 
Modernizer Options:
 
  -final-syntax-check        - Check for correct syntax after applying transformations
  -for-compilers=<string>    - Select transforms targeting the intersection of
                               language features supported by the given compilers.
                               Takes a comma-separated list of <compiler>-<version>.
                               	<compiler> can be any of: clang, gcc, icc, msvc
                               	<version> is <major>[.<minor>]
  -help                      - Display available options (-help-hidden for more)
  -help-list                 - Display list of available options (-help-list-hidden for more)
  -perf=<directory name>     - Capture performance data and output to specified directory. Default: ./migrate_perf
  -risk                      - Select a maximum risk level:
    =safe                    -   Only safe transformations
    =reasonable              -   Enable transformations that might change semantics (default)
    =risky                   -   Enable transformations that are likely to change semantics
  -summary                   - Print transform summary
  -version                   - Display the version of this program
 
Serialization Options:
 
  -serialize-dir=<string>    - Path to an existing directory in which to write
                               serialized replacements. Default behaviour is to
                               write to a temporary directory.
  -serialize-replacements    - Serialize translation unit replacements to disk instead of changing files.
 
Transforms:
 
  -add-override              - Make use of override specifier where possible
  -loop-convert              - Make use of range-based for loops where possible
  -pass-by-value             - Pass parameters by value where possible
  -replace-auto_ptr          - Replace std::auto_ptr (deprecated) by std::unique_ptr (EXPERIMENTAL)
  -use-auto                  - Use of 'auto' type specifier
  -use-nullptr               - Make use of nullptr keyword where possible
 
Transforms' options:
 
  -override-macros           - Detect and use macros that expand to the 'override' keyword.
  -user-null-macros=<string> - Comma-separated list of user-defined macro names that behave like NULL
 
-p <build-path> is used to read a compile command database.
 
	For example, it can be a CMake build directory in which a file named
	compile_commands.json exists (use -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
	CMake option to get this output). When no build path is specified,
	a search for compile_commands.json will be attempted through all
	parent paths of the first input file . See:
	http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html for an
	example of setting up Clang Tooling on a source tree.
 
<source0> ... specify the paths of source files. These paths are
	looked up in the compile command database. If the path of a file is
	absolute, it needs to point into CMake's source tree. If the path is
	relative, the current working directory needs to be in the CMake
	source tree and the file must be in a subdirectory of the current
	working directory. "./" prefixes in the relative files will be
	automatically removed, but the rest of a relative path must be a
	suffix of a path in the compile command database.
 
EXAMPLES:
 
Apply all transforms on a file that doesn't require compilation arguments:
 
  clang-modernize file.cpp
 
Convert for loops to ranged-based for loops for all files in the compilation
database that belong in a project subtree and then reformat the code
automatically using the LLVM style:
 
    clang-modernize -p build/path -include project/path -format -loop-convert
 
Make use of both nullptr and the override specifier, using git ls-files:
 
  git ls-files '*.cpp' | xargs -I{} clang-modernize -p build/path \
      -use-nullptr -add-override -override-macros {}
 
Apply all transforms supported by both clang >= 3.0 and gcc >= 4.7 to
foo.cpp and any included headers in bar:
 
  clang-modernize -for-compilers=clang-3.0,gcc-4.7 foo.cpp \
      -include bar -- -std=c++11 -Ibar

関連項目