From 75bd1c3f21ed08407bd082a0fcd51fe3403c03f2 Mon Sep 17 00:00:00 2001 From: Alan Hamlett Date: Tue, 23 Dec 2014 02:29:58 -0600 Subject: [PATCH] C++ dependency parser plugin --- wakatime/languages/c_cpp.py | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 wakatime/languages/c_cpp.py diff --git a/wakatime/languages/c_cpp.py b/wakatime/languages/c_cpp.py new file mode 100644 index 0000000..f14f4ae --- /dev/null +++ b/wakatime/languages/c_cpp.py @@ -0,0 +1,37 @@ +# -*- coding: utf-8 -*- +""" + wakatime.languages.c_cpp + ~~~~~~~~~~~~~~~~~~~~~~~~ + + Parse dependencies from C++ code. + + :copyright: (c) 2014 Alan Hamlett. + :license: BSD, see LICENSE for more details. +""" + +from . import TokenParser +from ..compat import u + + +class CppParser(TokenParser): + + def parse(self, tokens=[]): + if not tokens and not self.tokens: + self.tokens = self._extract_tokens() + for index, token, content in self.tokens: + self._process_token(token, content) + return self.dependencies + + def _process_token(self, token, content): + if u(token).split('.')[-1] == 'Preproc': + self._process_preproc(token, content) + else: + self._process_other(token, content) + + def _process_preproc(self, token, content): + if content.strip().startswith('include ') or content.strip().startswith("include\t"): + content = content.replace('include', '', 1).strip() + self.append(content, truncate=False) + + def _process_other(self, token, content): + pass