From 62c4eebaa307538bdec7731fe15718f5f05f713a Mon Sep 17 00:00:00 2001 From: Wenzel Jakob Date: Wed, 4 Jun 2014 18:14:08 +0200 Subject: [PATCH] Added Mitsuba-specific configuraiton files for 'ag' and 'YouCompleteMe' Ag is an amazing grep replacement which quickly searches the entire codebase for keywords YouCompleteMe provides code completion in VIM using a Clang backend. The committed configuration file automatically fetches compilation options from config.py. --- .agignore | 5 ++++ .ycm_extra_conf.py | 59 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 .agignore create mode 100644 .ycm_extra_conf.py diff --git a/.agignore b/.agignore new file mode 100644 index 00000000..f2e69fbc --- /dev/null +++ b/.agignore @@ -0,0 +1,5 @@ +dependencies +build +data +Mitsuba.app +scenes diff --git a/.ycm_extra_conf.py b/.ycm_extra_conf.py new file mode 100644 index 00000000..a74fa60d --- /dev/null +++ b/.ycm_extra_conf.py @@ -0,0 +1,59 @@ +import os +import re +import ast + +SCRIPT_PATH = os.path.dirname(os.path.abspath(__file__)) + +flags = [] +pattern = re.compile('^([A-Z0-9]+)\s*=\s*(\[.*\])') +with open(os.path.join(SCRIPT_PATH, "config.py")) as f: + for line in f: + result = pattern.search(line) + if result is None: + continue + key = result.group(1) + if 'LINK' in flags or (not 'FLAGS' in key and not 'INCLUDE' in key): + continue + try: + result = ast.literal_eval(result.group(2)) + if 'INCLUDE' in key: + flags += [ '-I' + path.replace('#', '') for path in result ] + else: + flags += result + except: + pass + +def MakeRelativePathsInFlagsAbsolute(flags, working_directory): + if not working_directory: + return list(flags) + new_flags = [] + make_next_absolute = False + path_flags = ['-isystem', '-I', '-iquote', '--sysroot='] + for flag in flags: + new_flag = flag + + if make_next_absolute: + make_next_absolute = False + if not flag.startswith('/'): + new_flag = os.path.join(working_directory, flag) + + for path_flag in path_flags: + if flag == path_flag: + make_next_absolute = True + break + + if flag.startswith(path_flag): + path = flag[len(path_flag):] + new_flag = path_flag + os.path.join(working_directory, path) + break + + if new_flag: + new_flags.append(new_flag) + return new_flags + +def FlagsForFile(filename, **kwargs): + final_flags = MakeRelativePathsInFlagsAbsolute(flags, SCRIPT_PATH) + ['-x', 'c++'] + return { + 'flags': final_flags, + 'do_cache': True + }