forked from OSchip/llvm-project
Allow _clang-format as alternative to .clang-format config filename
Dotfiles are impractical on Windows. This makes clang-format search for the style configuration file as '_clang-format' in addition to the usual '.clang-format'. This is similar to how VIM searches for '_vimrc' on Windows. Differential Revision: http://llvm-reviews.chandlerc.com/D1629 llvm-svn: 190413
This commit is contained in:
parent
d532cb6bed
commit
9f6581bb88
|
@ -72,8 +72,8 @@ to format C/C++/Obj-C code.
|
||||||
|
|
||||||
When the desired code formatting style is different from the available options,
|
When the desired code formatting style is different from the available options,
|
||||||
the style can be customized using the ``-style="{key: value, ...}"`` option or
|
the style can be customized using the ``-style="{key: value, ...}"`` option or
|
||||||
by putting your style configuration to the ``.clang-format`` file in your
|
by putting your style configuration in the ``.clang-format`` or ``_clang-format``
|
||||||
project's directory and using ``clang-format -style=file``.
|
file in your project's directory and using ``clang-format -style=file``.
|
||||||
|
|
||||||
An easy way to create the ``.clang-format`` file is:
|
An easy way to create the ``.clang-format`` file is:
|
||||||
|
|
||||||
|
|
|
@ -16,8 +16,8 @@ Configuring Style with clang-format
|
||||||
|
|
||||||
:program:`clang-format` supports two ways to provide custom style options:
|
:program:`clang-format` supports two ways to provide custom style options:
|
||||||
directly specify style configuration in the ``-style=`` command line option or
|
directly specify style configuration in the ``-style=`` command line option or
|
||||||
use ``-style=file`` and put style configuration in the ``.clang-format`` file
|
use ``-style=file`` and put style configuration in the ``.clang-format`` or
|
||||||
in the project directory.
|
``_clang-format`` file in the project directory.
|
||||||
|
|
||||||
When using ``-style=file``, :program:`clang-format` for each input file will
|
When using ``-style=file``, :program:`clang-format` for each input file will
|
||||||
try to find the ``.clang-format`` file located in the closest parent directory
|
try to find the ``.clang-format`` file located in the closest parent directory
|
||||||
|
|
|
@ -8,6 +8,10 @@
|
||||||
// RUN: clang-format -style=file %t.cpp 2>&1 | FileCheck -strict-whitespace -check-prefix=CHECK5 %s
|
// RUN: clang-format -style=file %t.cpp 2>&1 | FileCheck -strict-whitespace -check-prefix=CHECK5 %s
|
||||||
// RUN: printf "\n" > %T/.clang-format
|
// RUN: printf "\n" > %T/.clang-format
|
||||||
// RUN: clang-format -style=file %t.cpp 2>&1 | FileCheck -strict-whitespace -check-prefix=CHECK6 %s
|
// RUN: clang-format -style=file %t.cpp 2>&1 | FileCheck -strict-whitespace -check-prefix=CHECK6 %s
|
||||||
|
// RUN: [ ! -e %T/.clang-format ] || rm %T/.clang-format
|
||||||
|
// RUN: [ ! -e %T/_clang-format ] || rm %T/_clang-format
|
||||||
|
// RUN: printf "BasedOnStyle: google\nIndentWidth: 6\n" > %T/_clang-format
|
||||||
|
// RUN: clang-format -style=file %t.cpp 2>&1 | FileCheck -strict-whitespace -check-prefix=CHECK7 %s
|
||||||
void f() {
|
void f() {
|
||||||
// CHECK1: {{^ int\* i;$}}
|
// CHECK1: {{^ int\* i;$}}
|
||||||
// CHECK2: {{^ int \*i;$}}
|
// CHECK2: {{^ int \*i;$}}
|
||||||
|
@ -19,6 +23,7 @@ void f() {
|
||||||
// CHECK5: {{^ int\* i;$}}
|
// CHECK5: {{^ int\* i;$}}
|
||||||
// CHECK6: {{^Error reading .*\.clang-format: Invalid argument}}
|
// CHECK6: {{^Error reading .*\.clang-format: Invalid argument}}
|
||||||
// CHECK6: {{^ int \*i;$}}
|
// CHECK6: {{^ int \*i;$}}
|
||||||
|
// CHECK7: {{^ int\* i;$}}
|
||||||
int*i;
|
int*i;
|
||||||
int j;
|
int j;
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,11 +37,12 @@ namespace LLVM.ClangFormat
|
||||||
[DisplayName("Style")]
|
[DisplayName("Style")]
|
||||||
[Description("Coding style, currently supports:\n" +
|
[Description("Coding style, currently supports:\n" +
|
||||||
" - Predefined styles ('LLVM', 'Google', 'Chromium', 'Mozilla').\n" +
|
" - Predefined styles ('LLVM', 'Google', 'Chromium', 'Mozilla').\n" +
|
||||||
" - 'File' to search for a YAML .clang-format configuration.\n" +
|
" - 'File' to search for a YAML .clang-format or _clang-format\n" +
|
||||||
|
" configuration file.\n" +
|
||||||
" - A YAML configuration snippet.\n\n" +
|
" - A YAML configuration snippet.\n\n" +
|
||||||
"'File':\n" +
|
"'File':\n" +
|
||||||
" Searches for a .clang-format configuration in the source file's\n" +
|
" Searches for a .clang-format or _clang-format configuration file\n" +
|
||||||
" directory and its parents.\n\n" +
|
" in the source file's directory and its parents.\n\n" +
|
||||||
"YAML configuration snippet:\n" +
|
"YAML configuration snippet:\n" +
|
||||||
" The content of a .clang-format configuration file, as string.\n" +
|
" The content of a .clang-format configuration file, as string.\n" +
|
||||||
" Example: '{BasedOnStyle: \"LLVM\", IndentWidth: 8}'\n\n" +
|
" Example: '{BasedOnStyle: \"LLVM\", IndentWidth: 8}'\n\n" +
|
||||||
|
|
|
@ -132,12 +132,22 @@ FormatStyle getStyle(StringRef StyleName, StringRef FileName) {
|
||||||
!Directory.empty();
|
!Directory.empty();
|
||||||
Directory = llvm::sys::path::parent_path(Directory)) {
|
Directory = llvm::sys::path::parent_path(Directory)) {
|
||||||
SmallString<128> ConfigFile(Directory);
|
SmallString<128> ConfigFile(Directory);
|
||||||
|
|
||||||
llvm::sys::path::append(ConfigFile, ".clang-format");
|
llvm::sys::path::append(ConfigFile, ".clang-format");
|
||||||
DEBUG(llvm::dbgs() << "Trying " << ConfigFile << "...\n");
|
DEBUG(llvm::dbgs() << "Trying " << ConfigFile << "...\n");
|
||||||
bool IsFile = false;
|
bool IsFile = false;
|
||||||
// Ignore errors from is_regular_file: we only need to know if we can read
|
// Ignore errors from is_regular_file: we only need to know if we can read
|
||||||
// the file or not.
|
// the file or not.
|
||||||
llvm::sys::fs::is_regular_file(Twine(ConfigFile), IsFile);
|
llvm::sys::fs::is_regular_file(Twine(ConfigFile), IsFile);
|
||||||
|
|
||||||
|
if (!IsFile) {
|
||||||
|
// Try _clang-format too, since dotfiles are not commonly used on Windows.
|
||||||
|
ConfigFile = Directory;
|
||||||
|
llvm::sys::path::append(ConfigFile, "_clang-format");
|
||||||
|
DEBUG(llvm::dbgs() << "Trying " << ConfigFile << "...\n");
|
||||||
|
llvm::sys::fs::is_regular_file(Twine(ConfigFile), IsFile);
|
||||||
|
}
|
||||||
|
|
||||||
if (IsFile) {
|
if (IsFile) {
|
||||||
OwningPtr<MemoryBuffer> Text;
|
OwningPtr<MemoryBuffer> Text;
|
||||||
if (error_code ec = MemoryBuffer::getFile(ConfigFile, Text)) {
|
if (error_code ec = MemoryBuffer::getFile(ConfigFile, Text)) {
|
||||||
|
|
|
@ -21,7 +21,8 @@ binary = 'clang-format'
|
||||||
|
|
||||||
# Change this to format according to other formatting styles. See the output of
|
# Change this to format according to other formatting styles. See the output of
|
||||||
# 'clang-format --help' for a list of supported styles. The default looks for
|
# 'clang-format --help' for a list of supported styles. The default looks for
|
||||||
# a '.clang-format' file to indicate the style that should be used.
|
# a '.clang-format' or '_clang-format' file to indicate the style that should be
|
||||||
|
# used.
|
||||||
style = 'file'
|
style = 'file'
|
||||||
|
|
||||||
class ClangFormatCommand(sublime_plugin.TextCommand):
|
class ClangFormatCommand(sublime_plugin.TextCommand):
|
||||||
|
|
|
@ -28,7 +28,8 @@ binary = 'clang-format'
|
||||||
|
|
||||||
# Change this to format according to other formatting styles. See the output of
|
# Change this to format according to other formatting styles. See the output of
|
||||||
# 'clang-format --help' for a list of supported styles. The default looks for
|
# 'clang-format --help' for a list of supported styles. The default looks for
|
||||||
# a '.clang-format' file to indicate the style that should be used.
|
# a '.clang-format' or '_clang-format' file to indicate the style that should be
|
||||||
|
# used.
|
||||||
style = 'file'
|
style = 'file'
|
||||||
|
|
||||||
# Get the current text.
|
# Get the current text.
|
||||||
|
|
Loading…
Reference in New Issue