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