improve C# and php dependency detection

This commit is contained in:
Alan Hamlett 2015-10-01 12:45:15 -07:00
parent 3f65a3ab0c
commit 9fd813c489
2 changed files with 36 additions and 5 deletions

View file

@ -10,9 +10,16 @@
""" """
from . import TokenParser from . import TokenParser
from ..compat import u
class CSharpParser(TokenParser): class CSharpParser(TokenParser):
exclude = [
r'^system$',
r'^microsoft$',
]
state = None
buffer = u('')
def parse(self): def parse(self):
for index, token, content in self.tokens: for index, token, content in self.tokens:
@ -20,14 +27,38 @@ class CSharpParser(TokenParser):
return self.dependencies return self.dependencies
def _process_token(self, token, content): def _process_token(self, token, content):
if self.partial(token) == 'Namespace': if self.partial(token) == 'Keyword':
self._process_keyword(token, content)
if self.partial(token) == 'Namespace' or self.partial(token) == 'Name':
self._process_namespace(token, content) self._process_namespace(token, content)
elif self.partial(token) == 'Punctuation':
self._process_punctuation(token, content)
else: else:
self._process_other(token, content) self._process_other(token, content)
def _process_keyword(self, token, content):
if content == 'using':
self.state = 'import'
self.buffer = u('')
def _process_namespace(self, token, content): def _process_namespace(self, token, content):
if content != 'import' and content != 'package' and content != 'namespace': if self.state == 'import':
self.append(content, truncate=True) if u(content) != u('import') and u(content) != u('package') and u(content) != u('namespace') and u(content) != u('static'):
if u(content) == u(';'): # pragma: nocover
self._process_punctuation(token, content)
else:
self.buffer += u(content)
def _process_punctuation(self, token, content):
if self.state == 'import':
if u(content) == u(';'):
self.append(self.buffer, truncate=True)
self.buffer = u('')
self.state = None
elif u(content) == u('='):
self.buffer = u('')
else:
self.buffer += u(content)
def _process_other(self, token, content): def _process_other(self, token, content):
pass pass

View file

@ -61,10 +61,10 @@ class PhpParser(TokenParser):
def _process_literal_string(self, token, content): def _process_literal_string(self, token, content):
if self.state == 'include': if self.state == 'include':
if content != '"': if content != '"' and content != "'":
content = content.strip() content = content.strip()
if u(token) == 'Token.Literal.String.Double': if u(token) == 'Token.Literal.String.Double':
content = u('"{0}"').format(content) content = u("'{0}'").format(content)
self.append(content) self.append(content)
self.state = None self.state = None