Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(15)

Side by Side Diff: tools/vim/chromium.ycm_extra_conf.py

Issue 2303813002: Fix the YCM tests on Mac. (Closed)
Patch Set: The proper^2 fix is actually to remove all uses of realpath Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | tools/vim/ninja_output.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 # Autocompletion config for YouCompleteMe in Chromium. 5 # Autocompletion config for YouCompleteMe in Chromium.
6 # 6 #
7 # USAGE: 7 # USAGE:
8 # 8 #
9 # 1. Install YCM [https://github.com/Valloric/YouCompleteMe] 9 # 1. Install YCM [https://github.com/Valloric/YouCompleteMe]
10 # (Googlers should check out [go/ycm]) 10 # (Googlers should check out [go/ycm])
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
73 73
74 Simply checks parent directories until it finds .gclient and src/. 74 Simply checks parent directories until it finds .gclient and src/.
75 75
76 Args: 76 Args:
77 filename: (String) Path to source file being edited. 77 filename: (String) Path to source file being edited.
78 78
79 Returns: 79 Returns:
80 (String) Path of 'src/', or None if unable to find. 80 (String) Path of 'src/', or None if unable to find.
81 """ 81 """
82 curdir = os.path.normpath(os.path.dirname(filename)) 82 curdir = os.path.normpath(os.path.dirname(filename))
83 while not (os.path.basename(os.path.realpath(curdir)) == 'src' 83 while not (os.path.basename(curdir) == 'src'
84 and PathExists(curdir, 'DEPS') 84 and PathExists(curdir, 'DEPS')
85 and (PathExists(curdir, '..', '.gclient') 85 and (PathExists(curdir, '..', '.gclient')
86 or PathExists(curdir, '.git'))): 86 or PathExists(curdir, '.git'))):
87 nextdir = os.path.normpath(os.path.join(curdir, '..')) 87 nextdir = os.path.normpath(os.path.join(curdir, '..'))
88 if nextdir == curdir: 88 if nextdir == curdir:
89 return None 89 return None
90 curdir = nextdir 90 curdir = nextdir
91 return curdir 91 return curdir
92 92
93 93
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
152 Args: 152 Args:
153 out_dir: (String) Absolute path to ninja build output directory. 153 out_dir: (String) Absolute path to ninja build output directory.
154 filename: (String) Absolute path to source file. 154 filename: (String) Absolute path to source file.
155 155
156 Returns: 156 Returns:
157 (List of Strings) List of target names. Will return [] if |filename| doesn't 157 (List of Strings) List of target names. Will return [] if |filename| doesn't
158 yield any .o or .obj outputs. 158 yield any .o or .obj outputs.
159 """ 159 """
160 # Ninja needs the path to the source file relative to the output build 160 # Ninja needs the path to the source file relative to the output build
161 # directory. 161 # directory.
162 rel_filename = os.path.relpath(os.path.realpath(filename), out_dir) 162 rel_filename = os.path.relpath(filename, out_dir)
163 163
164 p = subprocess.Popen(['ninja', '-C', out_dir, '-t', 'query', rel_filename], 164 p = subprocess.Popen(['ninja', '-C', out_dir, '-t', 'query', rel_filename],
165 stdout=subprocess.PIPE, stderr=subprocess.STDOUT, 165 stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
166 universal_newlines=True) 166 universal_newlines=True)
167 stdout, _ = p.communicate() 167 stdout, _ = p.communicate()
168 if p.returncode != 0: 168 if p.returncode != 0:
169 return [] 169 return []
170 170
171 # The output looks like: 171 # The output looks like:
172 # ../../relative/path/to/source.cc: 172 # ../../relative/path/to/source.cc:
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
313 additional_flags = ['-I' + os.path.join(chrome_root)] 313 additional_flags = ['-I' + os.path.join(chrome_root)]
314 314
315 # Version of Clang used to compile Chromium can be newer then version of 315 # Version of Clang used to compile Chromium can be newer then version of
316 # libclang that YCM uses for completion. So it's possible that YCM's libclang 316 # libclang that YCM uses for completion. So it's possible that YCM's libclang
317 # doesn't know about some used warning options, which causes compilation 317 # doesn't know about some used warning options, which causes compilation
318 # warnings (and errors, because of '-Werror'); 318 # warnings (and errors, because of '-Werror');
319 additional_flags.append('-Wno-unknown-warning-option') 319 additional_flags.append('-Wno-unknown-warning-option')
320 320
321 sys.path.append(os.path.join(chrome_root, 'tools', 'vim')) 321 sys.path.append(os.path.join(chrome_root, 'tools', 'vim'))
322 from ninja_output import GetNinjaOutputDirectory 322 from ninja_output import GetNinjaOutputDirectory
323 out_dir = os.path.realpath(GetNinjaOutputDirectory(chrome_root)) 323 out_dir = GetNinjaOutputDirectory(chrome_root)
324 324
325 clang_line = GetClangCommandLineFromNinjaForSource( 325 clang_line = GetClangCommandLineFromNinjaForSource(
326 out_dir, GetBuildableSourceFile(chrome_root, filename)) 326 out_dir, GetBuildableSourceFile(chrome_root, filename))
327 if not clang_line: 327 if not clang_line:
328 # If ninja didn't know about filename or it's companion files, then try a 328 # If ninja didn't know about filename or it's companion files, then try a
329 # default build target. It is possible that the file is new, or build.ninja 329 # default build target. It is possible that the file is new, or build.ninja
330 # is stale. 330 # is stale.
331 clang_line = GetClangCommandLineFromNinjaForSource( 331 clang_line = GetClangCommandLineFromNinjaForSource(
332 out_dir, GetDefaultSourceFile(chrome_root, filename)) 332 out_dir, GetDefaultSourceFile(chrome_root, filename))
333 333
(...skipping 22 matching lines...) Expand all
356 # transient failure. Preventing YCM from caching the flags allows us to try to 356 # transient failure. Preventing YCM from caching the flags allows us to try to
357 # determine the flags again. 357 # determine the flags again.
358 should_cache_flags_for_file = bool(clang_flags) 358 should_cache_flags_for_file = bool(clang_flags)
359 359
360 final_flags = _default_flags + clang_flags 360 final_flags = _default_flags + clang_flags
361 361
362 return { 362 return {
363 'flags': final_flags, 363 'flags': final_flags,
364 'do_cache': should_cache_flags_for_file 364 'do_cache': should_cache_flags_for_file
365 } 365 }
OLDNEW
« no previous file with comments | « no previous file | tools/vim/ninja_output.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698