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

Unified Diff: tools/vim/chromium.ycm_extra_conf.py

Issue 2474243002: [Vim/YCM] Identify ObjC and ObjC++ headers. (Closed)
Patch Set: Use normal cxx for the new tests. Created 4 years, 1 month 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | tools/vim/tests/chromium.ycm_extra_conf_unittest.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/vim/chromium.ycm_extra_conf.py
diff --git a/tools/vim/chromium.ycm_extra_conf.py b/tools/vim/chromium.ycm_extra_conf.py
index a2f74a2f1089221cbe96a0eea728b510e3655f94..945639423bb810545f9e7721e08f841cf1ca0ac2 100644
--- a/tools/vim/chromium.ycm_extra_conf.py
+++ b/tools/vim/chromium.ycm_extra_conf.py
@@ -63,6 +63,8 @@ _default_flags = [
'c++',
]
+_header_alternates = ('.cc', '.cpp', '.c', '.mm', '.m')
+
_extension_flags = {
'.m': ['-x', 'objective-c'],
'.mm': ['-x', 'objective-c++'],
@@ -117,35 +119,6 @@ def GetDefaultSourceFile(chrome_root, filename):
return os.path.join(chrome_root, 'base', 'logging.cc')
-def GetBuildableSourceFile(chrome_root, filename):
- """Returns a buildable source file corresponding to |filename|.
-
- A buildable source file is one which is likely to be passed into clang as a
- source file during the build. For .h files, returns the closest matching .cc,
- .cpp or .c file. If no such file is found, returns the same as
- GetDefaultSourceFile().
-
- Args:
- chrome_root: (String) Absolute path to the root of Chromium checkout.
- filename: (String) Absolute path to the target source file.
-
- Returns:
- (String) Absolute path to source file.
- """
- if filename.endswith('.h'):
- # Header files can't be built. Instead, try to match a header file to its
- # corresponding source file.
- alternates = ['.cc', '.cpp', '.c']
- for alt_extension in alternates:
- alt_name = filename[:-2] + alt_extension
- if os.path.exists(alt_name):
- return alt_name
-
- return GetDefaultSourceFile(chrome_root, filename)
-
- return filename
-
-
def GetNinjaBuildOutputsForSourceFile(out_dir, filename):
"""Returns a list of build outputs for filename.
@@ -326,8 +299,22 @@ def GetClangOptionsFromNinjaForFilename(chrome_root, filename):
from ninja_output import GetNinjaOutputDirectory
out_dir = GetNinjaOutputDirectory(chrome_root)
- clang_line = GetClangCommandLineFromNinjaForSource(
- out_dir, GetBuildableSourceFile(chrome_root, filename))
+ basename, extension = os.path.splitext(filename)
+ if extension == '.h':
+ candidates = [basename + ext for ext in _header_alternates]
+ else:
+ candidates = [filename]
+
+ clang_line = None
+ buildable_extension = extension
+ for candidate in candidates:
+ clang_line = GetClangCommandLineFromNinjaForSource(out_dir, candidate)
+ if clang_line:
+ buildable_extension = os.path.splitext(candidate)[1]
+ break
+
+ additional_flags += _extension_flags.get(buildable_extension, [])
+
if not clang_line:
# If ninja didn't know about filename or it's companion files, then try a
# default build target. It is possible that the file is new, or build.ninja
@@ -352,7 +339,6 @@ def FlagsForFile(filename):
'flags': (List of Strings) Command line flags.
'do_cache': (Boolean) True if the result should be cached.
"""
- ext = os.path.splitext(filename)[1]
abs_filename = os.path.abspath(filename)
chrome_root = FindChromeSrcFromFilename(abs_filename)
clang_flags = GetClangOptionsFromNinjaForFilename(chrome_root, abs_filename)
@@ -362,7 +348,7 @@ def FlagsForFile(filename):
# determine the flags again.
should_cache_flags_for_file = bool(clang_flags)
- final_flags = _default_flags + _extension_flags.get(ext, []) + clang_flags
+ final_flags = _default_flags + clang_flags
return {
'flags': final_flags,
« no previous file with comments | « no previous file | tools/vim/tests/chromium.ycm_extra_conf_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698