r190691 - clang-format: Add -assume-filename option for editor integrations.
Daniel Jasper
djasper at google.com
Fri Sep 13 06:40:24 PDT 2013
Author: djasper
Date: Fri Sep 13 08:40:24 2013
New Revision: 190691
URL: http://llvm.org/viewvc/llvm-project?rev=190691&view=rev
Log:
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.
Modified:
cfe/trunk/tools/clang-format/ClangFormat.cpp
cfe/trunk/tools/clang-format/clang-format-sublime.py
cfe/trunk/tools/clang-format/clang-format.el
cfe/trunk/tools/clang-format/clang-format.py
Modified: cfe/trunk/tools/clang-format/ClangFormat.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/clang-format/ClangFormat.cpp?rev=190691&r1=190690&r2=190691&view=diff
==============================================================================
--- cfe/trunk/tools/clang-format/ClangFormat.cpp (original)
+++ cfe/trunk/tools/clang-format/ClangFormat.cpp Fri Sep 13 08:40:24 2013
@@ -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
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");
Modified: cfe/trunk/tools/clang-format/clang-format-sublime.py
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/clang-format/clang-format-sublime.py?rev=190691&r1=190690&r2=190691&view=diff
==============================================================================
--- cfe/trunk/tools/clang-format/clang-format-sublime.py (original)
+++ cfe/trunk/tools/clang-format/clang-format-sublime.py Fri Sep 13 08:40:24 2013
@@ -37,21 +37,21 @@ class ClangFormatCommand(sublime_plugin.
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)
Modified: cfe/trunk/tools/clang-format/clang-format.el
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/clang-format/clang-format.el?rev=190691&r1=190690&r2=190691&view=diff
==============================================================================
--- cfe/trunk/tools/clang-format/clang-format.el (original)
+++ cfe/trunk/tools/clang-format/clang-format.el Fri Sep 13 08:40:24 2013
@@ -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
Modified: cfe/trunk/tools/clang-format/clang-format.py
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/clang-format/clang-format.py?rev=190691&r1=190690&r2=190691&view=diff
==============================================================================
--- cfe/trunk/tools/clang-format/clang-format.py (original)
+++ cfe/trunk/tools/clang-format/clang-format.py Fri Sep 13 08:40:24 2013
@@ -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)
More information about the cfe-commits
mailing list