|
|
|
@ -41,31 +41,28 @@ log = logging.getLogger('WakaTime')
|
|
|
|
|
|
|
|
|
|
def get_file_stats(file_name, entity_type='file', lineno=None, cursorpos=None,
|
|
|
|
|
plugin=None, language=None, local_file=None):
|
|
|
|
|
if entity_type != 'file':
|
|
|
|
|
stats = {
|
|
|
|
|
'language': None,
|
|
|
|
|
'dependencies': [],
|
|
|
|
|
'lines': None,
|
|
|
|
|
'lineno': lineno,
|
|
|
|
|
'cursorpos': cursorpos,
|
|
|
|
|
}
|
|
|
|
|
else:
|
|
|
|
|
language, lexer = standardize_language(language, plugin)
|
|
|
|
|
"""Returns a hash of information about the entity."""
|
|
|
|
|
|
|
|
|
|
language = standardize_language(language, plugin)
|
|
|
|
|
stats = {
|
|
|
|
|
'language': language,
|
|
|
|
|
'dependencies': [],
|
|
|
|
|
'lines': None,
|
|
|
|
|
'lineno': lineno,
|
|
|
|
|
'cursorpos': cursorpos,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if entity_type == 'file':
|
|
|
|
|
lexer = get_lexer(language)
|
|
|
|
|
if not language:
|
|
|
|
|
language, lexer = guess_language(file_name, local_file)
|
|
|
|
|
|
|
|
|
|
language = use_root_language(language, lexer)
|
|
|
|
|
|
|
|
|
|
parser = DependencyParser(local_file or file_name, lexer)
|
|
|
|
|
dependencies = parser.parse()
|
|
|
|
|
|
|
|
|
|
stats = {
|
|
|
|
|
'language': language,
|
|
|
|
|
'dependencies': dependencies,
|
|
|
|
|
stats.update({
|
|
|
|
|
'language': use_root_language(language, lexer),
|
|
|
|
|
'dependencies': parser.parse(),
|
|
|
|
|
'lines': number_lines_in_file(local_file or file_name),
|
|
|
|
|
'lineno': lineno,
|
|
|
|
|
'cursorpos': cursorpos,
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
return stats
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -222,22 +219,21 @@ def number_lines_in_file(file_name):
|
|
|
|
|
def standardize_language(language, plugin):
|
|
|
|
|
"""Maps a string to the equivalent Pygments language.
|
|
|
|
|
|
|
|
|
|
Returns a tuple of (language_str, lexer_obj).
|
|
|
|
|
Returns the standardized language string.
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
if not language:
|
|
|
|
|
return None, None
|
|
|
|
|
return None
|
|
|
|
|
|
|
|
|
|
# standardize language for this plugin
|
|
|
|
|
if plugin:
|
|
|
|
|
plugin = plugin.split(' ')[-1].split('/')[0].split('-')[0]
|
|
|
|
|
standardized = get_language_from_json(language, plugin)
|
|
|
|
|
if standardized is not None:
|
|
|
|
|
return standardized, get_lexer(standardized)
|
|
|
|
|
return standardized
|
|
|
|
|
|
|
|
|
|
# standardize language against default languages
|
|
|
|
|
standardized = get_language_from_json(language, 'default')
|
|
|
|
|
return standardized, get_lexer(standardized)
|
|
|
|
|
return get_language_from_json(language, 'default')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_lexer(language):
|
|
|
|
|