summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorDaniel Jasper <djasper@google.com>2013-09-13 13:40:24 +0000
committerDaniel Jasper <djasper@google.com>2013-09-13 13:40:24 +0000
commit62df7ef28c5a1ed3f5ffd1036162cafe0e1fcd4c (patch)
tree7530a9d9f6862d423d52eb0d9d8c4397d6766642 /tools
parentcb2dfc7247a66e672548ad645a0ba2c369635384 (diff)
downloadclang-62df7ef28c5a1ed3f5ffd1036162cafe0e1fcd4c.tar.gz
clang-62df7ef28c5a1ed3f5ffd1036162cafe0e1fcd4c.tar.bz2
clang-62df7ef28c5a1ed3f5ffd1036162cafe0e1fcd4c.tar.xz
clang-format: Add -assume-filename option for editor integrations.
With -style=file, clang-format now starts to search for a .clang-format file starting at the file given with -assume-filename if it reads from stdin. Otherwise, it would start searching from the current directory, which is not helpful for editor integrations. Also changed vim, emacs and sublime integrations to actually make use of this flag. This fixes llvm.org/PR17072. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@190691 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools')
-rw-r--r--tools/clang-format/ClangFormat.cpp14
-rw-r--r--tools/clang-format/clang-format-sublime.py24
-rw-r--r--tools/clang-format/clang-format.el4
-rw-r--r--tools/clang-format/clang-format.py3
4 files changed, 30 insertions, 15 deletions
diff --git a/tools/clang-format/ClangFormat.cpp b/tools/clang-format/ClangFormat.cpp
index 592d46a530..71dcfc5640 100644
--- a/tools/clang-format/ClangFormat.cpp
+++ b/tools/clang-format/ClangFormat.cpp
@@ -73,6 +73,14 @@ static cl::opt<std::string>
"parameters, e.g.:\n"
" -style=\"{BasedOnStyle: llvm, IndentWidth: 8}\""),
cl::init("file"), cl::cat(ClangFormatCategory));
+
+static cl::opt<std::string>
+AssumeFilename("assume-filename",
+ cl::desc("When reading from stdin, clang-format assumes this\n"
+ "filename to look for a style config file (with\n"
+ "-style=file)."),
+ cl::cat(ClangFormatCategory));
+
static cl::opt<bool> Inplace("i",
cl::desc("Inplace edit <file>s, if specified."),
cl::cat(ClangFormatCategory));
@@ -126,11 +134,15 @@ FormatStyle getStyle(StringRef StyleName, StringRef FileName) {
return Style;
}
+ if (FileName == "-")
+ FileName = AssumeFilename;
SmallString<128> Path(FileName);
llvm::sys::fs::make_absolute(Path);
- for (StringRef Directory = llvm::sys::path::parent_path(Path);
+ for (StringRef Directory = Path;
!Directory.empty();
Directory = llvm::sys::path::parent_path(Directory)) {
+ if (!llvm::sys::fs::is_directory(Directory))
+ continue;
SmallString<128> ConfigFile(Directory);
llvm::sys::path::append(ConfigFile, ".clang-format");
diff --git a/tools/clang-format/clang-format-sublime.py b/tools/clang-format/clang-format-sublime.py
index 78c8939c1b..2099d7a98c 100644
--- a/tools/clang-format/clang-format-sublime.py
+++ b/tools/clang-format/clang-format-sublime.py
@@ -37,21 +37,21 @@ class ClangFormatCommand(sublime_plugin.TextCommand):
region_offset = min(region.a, region.b)
region_length = abs(region.b - region.a)
command.extend(['-offset', str(region_offset),
- '-length', str(region_length)])
+ '-length', str(region_length),
+ '-assume-filename', str(self.view.file_name())])
old_viewport_position = self.view.viewport_position()
buf = self.view.substr(sublime.Region(0, self.view.size()))
p = subprocess.Popen(command, stdout=subprocess.PIPE,
stderr=subprocess.PIPE, stdin=subprocess.PIPE)
output, error = p.communicate(buf.encode(encoding))
- if not error:
- self.view.replace(
- edit, sublime.Region(0, self.view.size()),
- output.decode(encoding))
- self.view.sel().clear()
- for region in regions:
- self.view.sel().add(region)
- # FIXME: Without the 10ms delay, the viewport sometimes jumps.
- sublime.set_timeout(lambda: self.view.set_viewport_position(
- old_viewport_position, False), 10)
- else:
+ if error:
print error
+ self.view.replace(
+ edit, sublime.Region(0, self.view.size()),
+ output.decode(encoding))
+ self.view.sel().clear()
+ for region in regions:
+ self.view.sel().add(region)
+ # FIXME: Without the 10ms delay, the viewport sometimes jumps.
+ sublime.set_timeout(lambda: self.view.set_viewport_position(
+ old_viewport_position, False), 10)
diff --git a/tools/clang-format/clang-format.el b/tools/clang-format/clang-format.el
index 531635e8ec..520a3e250c 100644
--- a/tools/clang-format/clang-format.el
+++ b/tools/clang-format/clang-format.el
@@ -38,10 +38,12 @@
(orig-point (point))
(style "file"))
(unwind-protect
- (call-process-region (point-min) (point-max) clang-format-binary t t nil
+ (call-process-region (point-min) (point-max) clang-format-binary
+ t (list t nil) nil
"-offset" (number-to-string (1- begin))
"-length" (number-to-string (- end begin))
"-cursor" (number-to-string (1- (point)))
+ "-assume-filename" (buffer-file-name)
"-style" style)
(goto-char (point-min))
(let ((json-output (json-read-from-string
diff --git a/tools/clang-format/clang-format.py b/tools/clang-format/clang-format.py
index d8338ab4da..c333e4dd14 100644
--- a/tools/clang-format/clang-format.py
+++ b/tools/clang-format/clang-format.py
@@ -49,7 +49,8 @@ if sys.platform.startswith('win32'):
# Call formatter.
p = subprocess.Popen([binary, '-lines', lines, '-style', style,
- '-cursor', str(cursor)],
+ '-cursor', str(cursor),
+ '-assume-filename', vim.current.buffer.name],
stdout=subprocess.PIPE, stderr=subprocess.PIPE,
stdin=subprocess.PIPE, startupinfo=startupinfo)
stdout, stderr = p.communicate(input=text)