From 4a61bafe9d4606190c28a6b0c5bc069fc2b6ce05 Mon Sep 17 00:00:00 2001 From: Alan Hamlett Date: Thu, 25 Dec 2014 13:35:39 -0600 Subject: [PATCH] update wakatime-cli to v3.0.3 --- plugin/packages/wakatime/HISTORY.rst | 6 + plugin/packages/wakatime/wakatime/__init__.py | 2 +- .../wakatime/wakatime/languages/__init__.py | 2 +- .../wakatime/wakatime/languages/templates.py | 127 ++++++++++++++++++ 4 files changed, 135 insertions(+), 2 deletions(-) diff --git a/plugin/packages/wakatime/HISTORY.rst b/plugin/packages/wakatime/HISTORY.rst index f8edab4..43a1e41 100644 --- a/plugin/packages/wakatime/HISTORY.rst +++ b/plugin/packages/wakatime/HISTORY.rst @@ -3,6 +3,12 @@ History ------- +3.0.3 (2014-12-25) +++++++++++++++++++ + +- detect JavaScript frameworks from script tags in Html template files + + 3.0.2 (2014-12-25) ++++++++++++++++++ diff --git a/plugin/packages/wakatime/wakatime/__init__.py b/plugin/packages/wakatime/wakatime/__init__.py index 93b5e86..2e4582b 100644 --- a/plugin/packages/wakatime/wakatime/__init__.py +++ b/plugin/packages/wakatime/wakatime/__init__.py @@ -13,7 +13,7 @@ from __future__ import print_function __title__ = 'wakatime' -__version__ = '3.0.2' +__version__ = '3.0.3' __author__ = 'Alan Hamlett' __license__ = 'BSD' __copyright__ = 'Copyright 2014 Alan Hamlett' diff --git a/plugin/packages/wakatime/wakatime/languages/__init__.py b/plugin/packages/wakatime/wakatime/languages/__init__.py index b895fd6..317336a 100644 --- a/plugin/packages/wakatime/wakatime/languages/__init__.py +++ b/plugin/packages/wakatime/wakatime/languages/__init__.py @@ -94,7 +94,7 @@ class DependencyParser(object): try: self.parser = getattr(module, class_name) except AttributeError: - log.debug(traceback.format_exc()) + log.debug('Module {0} is missing class {1}'.format(module.__name__, class_name)) except ImportError: log.debug(traceback.format_exc()) diff --git a/plugin/packages/wakatime/wakatime/languages/templates.py b/plugin/packages/wakatime/wakatime/languages/templates.py index 73d4ed6..200e418 100644 --- a/plugin/packages/wakatime/wakatime/languages/templates.py +++ b/plugin/packages/wakatime/wakatime/languages/templates.py @@ -91,3 +91,130 @@ class LassoJavascriptParser(TokenParser): def _process_literal_string(self, token, content): if 'famous/core/' in content.strip('"').strip("'"): self.append('famous') + + +class HtmlDjangoParser(TokenParser): + tags = [] + getting_attrs = False + current_attr = None + current_attr_value = None + + 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) == 'Token.Name.Tag': + self._process_tag(token, content) + elif u(token) == 'Token.Literal.String': + self._process_string(token, content) + elif u(token) == 'Token.Name.Attribute': + self._process_attribute(token, content) + + @property + def current_tag(self): + return None if len(self.tags) == 0 else self.tags[0] + + def _process_tag(self, token, content): + if content.startswith(''): + self.getting_attrs = False + self.current_attr = None + + def _process_attribute(self, token, content): + if self.getting_attrs: + self.current_attr = content.lower().strip('=') + else: + self.current_attr = None + self.current_attr_value = None + + def _process_string(self, token, content): + if self.getting_attrs and self.current_attr is not None: + if content.endswith('"') or content.endswith("'"): + if self.current_attr_value is not None: + self.current_attr_value += content + if self.current_tag == 'script' and self.current_attr == 'src': + self.append(self.current_attr_value) + self.current_attr = None + self.current_attr_value = None + else: + if len(content) == 1: + self.current_attr_value = content + else: + if self.current_tag == 'script' and self.current_attr == 'src': + self.append(content) + self.current_attr = None + self.current_attr_value = None + elif content.startswith('"') or content.startswith("'"): + if self.current_attr_value is None: + self.current_attr_value = content + else: + self.current_attr_value += content + + +class VelocityHtmlParser(HtmlDjangoParser): + pass + + +class MyghtyHtmlParser(HtmlDjangoParser): + pass + + +class MasonParser(HtmlDjangoParser): + pass + + +class MakoHtmlParser(HtmlDjangoParser): + pass + + +class CheetahHtmlParser(HtmlDjangoParser): + pass + + +class HtmlGenshiParser(HtmlDjangoParser): + pass + + +class RhtmlParser(HtmlDjangoParser): + pass + + +class HtmlPhpParser(HtmlDjangoParser): + pass + + +class HtmlSmartyParser(HtmlDjangoParser): + pass + + +class EvoqueHtmlParser(HtmlDjangoParser): + pass + + +class ColdfusionHtmlParser(HtmlDjangoParser): + pass + + +class LassoHtmlParser(HtmlDjangoParser): + pass + + +class HandlebarsHtmlParser(HtmlDjangoParser): + pass + + +class YamlJinjaParser(HtmlDjangoParser): + pass + + +class TwigHtmlParser(HtmlDjangoParser): + pass