Absolutely. Thanks!
On Fri, Oct 25, 2013 at 10:04 PM, Nico Weber <[email protected]> wrote: > On Fri, Sep 13, 2013 at 6:40 AM, Daniel Jasper <[email protected]> wrote: > >> 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], >> > > This broke formatting unnamed buffers in vim. I sometimes open a new tab, > paste in some code, and format that to see what clang-format does. This > used to work, now I get something about "execv() arg 2 must contain only > strings", probably due to vim.current.buffer.name being None. This patch > fixes it for me, is it ok to land this? > > Index: tools/clang-format/clang-format.py > =================================================================== > --- tools/clang-format/clang-format.py (revision 193427) > +++ tools/clang-format/clang-format.py (working copy) > @@ -48,9 +48,10 @@ > startupinfo.wShowWindow = subprocess.SW_HIDE > > # Call formatter. > -p = subprocess.Popen([binary, '-lines', lines, '-style', style, > - '-cursor', str(cursor), > - '-assume-filename', vim.current.buffer.name], > +command = [binary, '-lines', lines, '-style', style, '-cursor', > str(cursor)] > +if vim.current.buffer.name: > + command.append(['-assume-filename', vim.current.buffer.name]) > +p = subprocess.Popen(command, > stdout=subprocess.PIPE, stderr=subprocess.PIPE, > stdin=subprocess.PIPE, startupinfo=startupinfo) > stdout, stderr = p.communicate(input=text) > > > > >> stdout=subprocess.PIPE, stderr=subprocess.PIPE, >> stdin=subprocess.PIPE, startupinfo=startupinfo) >> stdout, stderr = p.communicate(input=text) >> >> >> _______________________________________________ >> cfe-commits mailing list >> [email protected] >> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >> > >
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
