mirror of
https://github.com/wakatime/sublime-wakatime.git
synced 2023-08-10 21:13:02 +03:00
Compare commits
6 Commits
Author | SHA1 | Date | |
---|---|---|---|
88466d7db2 | |||
122fcbbee5 | |||
c41fcec5d8 | |||
be09b34d44 | |||
e1ee1c1216 | |||
a37061924b |
24
HISTORY.rst
24
HISTORY.rst
@ -3,6 +3,26 @@ History
|
||||
-------
|
||||
|
||||
|
||||
8.3.3 (2018-12-19)
|
||||
++++++++++++++++++
|
||||
|
||||
- Upgrade wakatime-cli to v10.6.1.
|
||||
- Correctly parse include_only_with_project_file when set to false.
|
||||
`wakatime#161 <https://github.com/wakatime/wakatime/issues/161>`_
|
||||
- Support language argument for non-file entity types.
|
||||
- Send 25 heartbeats per API request.
|
||||
- New category "Writing Tests".
|
||||
`wakatime#156 <https://github.com/wakatime/wakatime/issues/156>`_
|
||||
- Fix bug caused by git config section without any submodule option defined.
|
||||
`wakatime#152 <https://github.com/wakatime/wakatime/issues/152>`_
|
||||
|
||||
|
||||
8.3.2 (2018-10-06)
|
||||
++++++++++++++++++
|
||||
|
||||
- Send buffered heartbeats to API every 30 seconds.
|
||||
|
||||
|
||||
8.3.1 (2018-10-05)
|
||||
++++++++++++++++++
|
||||
|
||||
@ -77,10 +97,10 @@ History
|
||||
- Upgrade wakatime-cli to v10.1.2.
|
||||
- Detect dependencies from Swift, Objective-C, TypeScript and JavaScript files.
|
||||
- Categorize .mjs files as JavaScript.
|
||||
`#wakatime121 <https://github.com/wakatime/wakatime/issues/121>`_
|
||||
`wakatime#121 <https://github.com/wakatime/wakatime/issues/121>`_
|
||||
- Detect dependencies from Elm, Haskell, Haxe, Kotlin, Rust, and Scala files.
|
||||
- Improved Matlab vs Objective-C language detection.
|
||||
`#wakatime129 <https://github.com/wakatime/wakatime/issues/129>`_
|
||||
`wakatime#129 <https://github.com/wakatime/wakatime/issues/129>`_
|
||||
|
||||
|
||||
8.0.6 (2018-01-04)
|
||||
|
19
WakaTime.py
19
WakaTime.py
@ -7,7 +7,7 @@ Website: https://wakatime.com/
|
||||
==========================================================="""
|
||||
|
||||
|
||||
__version__ = '8.3.1'
|
||||
__version__ = '8.3.3'
|
||||
|
||||
|
||||
import sublime
|
||||
@ -110,7 +110,6 @@ class Popen(subprocess.Popen):
|
||||
|
||||
|
||||
# globals
|
||||
HEARTBEAT_FREQUENCY = 2
|
||||
ST_VERSION = int(sublime.version())
|
||||
PLUGIN_DIR = os.path.dirname(os.path.realpath(__file__))
|
||||
API_CLIENT = os.path.join(PLUGIN_DIR, 'packages', 'wakatime', 'cli.py')
|
||||
@ -121,8 +120,11 @@ LAST_HEARTBEAT = {
|
||||
'file': None,
|
||||
'is_write': False,
|
||||
}
|
||||
LAST_HEARTBEAT_SENT_AT = 0
|
||||
PYTHON_LOCATION = None
|
||||
HEARTBEATS = queue.Queue()
|
||||
HEARTBEAT_FREQUENCY = 2 # minutes between logging heartbeat when editing same file
|
||||
SEND_BUFFER_SECONDS = 30 # seconds between sending buffered heartbeats to API
|
||||
|
||||
|
||||
# Log Levels
|
||||
@ -451,11 +453,18 @@ def append_heartbeat(entity, timestamp, is_write, view, project, folders):
|
||||
}
|
||||
|
||||
# process the queue of heartbeats in the future
|
||||
seconds = 4
|
||||
set_timeout(process_queue, seconds)
|
||||
set_timeout(lambda: process_queue(timestamp), SEND_BUFFER_SECONDS)
|
||||
|
||||
|
||||
def process_queue():
|
||||
def process_queue(timestamp):
|
||||
global LAST_HEARTBEAT_SENT_AT
|
||||
|
||||
# Prevent sending heartbeats more often than SEND_BUFFER_SECONDS
|
||||
now = int(time.time())
|
||||
if timestamp != LAST_HEARTBEAT['time'] and LAST_HEARTBEAT_SENT_AT > now - SEND_BUFFER_SECONDS:
|
||||
return
|
||||
LAST_HEARTBEAT_SENT_AT = now
|
||||
|
||||
try:
|
||||
heartbeat = HEARTBEATS.get_nowait()
|
||||
except queue.Empty:
|
||||
|
@ -1,7 +1,7 @@
|
||||
__title__ = 'wakatime'
|
||||
__description__ = 'Common interface to the WakaTime api.'
|
||||
__url__ = 'https://github.com/wakatime/wakatime'
|
||||
__version_info__ = ('10', '4', '1')
|
||||
__version_info__ = ('10', '6', '1')
|
||||
__version__ = '.'.join(__version_info__)
|
||||
__author__ = 'Alan Hamlett'
|
||||
__author_email__ = 'alan@wakatime.com'
|
||||
|
@ -89,8 +89,8 @@ def parse_arguments():
|
||||
help='Category of this heartbeat activity. Can be ' +
|
||||
'"coding", "building", "indexing", ' +
|
||||
'"debugging", "running tests", ' +
|
||||
'"manual testing", "browsing", ' +
|
||||
'"code reviewing" or "designing". ' +
|
||||
'"writing tests", "manual testing", ' +
|
||||
'"code reviewing", "browsing", or "designing". ' +
|
||||
'Defaults to "coding".')
|
||||
parser.add_argument('--proxy', dest='proxy', action=StoreWithoutQuotes,
|
||||
help='Optional proxy configuration. Supports HTTPS '+
|
||||
@ -275,7 +275,7 @@ def parse_arguments():
|
||||
except TypeError: # pragma: nocover
|
||||
pass
|
||||
if not args.include_only_with_project_file and configs.has_option('settings', 'include_only_with_project_file'):
|
||||
args.include_only_with_project_file = configs.get('settings', 'include_only_with_project_file')
|
||||
args.include_only_with_project_file = configs.get('settings', 'include_only_with_project_file') == 'true'
|
||||
if not args.include:
|
||||
args.include = []
|
||||
if configs.has_option('settings', 'include'):
|
||||
|
@ -53,4 +53,4 @@ DEFAULT_SYNC_OFFLINE_ACTIVITY = 100
|
||||
Even when sending more heartbeats, this is the number of heartbeats sent per
|
||||
individual https request to the WakaTime API.
|
||||
"""
|
||||
HEARTBEATS_PER_REQUEST = 50
|
||||
HEARTBEATS_PER_REQUEST = 25
|
||||
|
@ -131,5 +131,5 @@ class DependencyParser(object):
|
||||
if self.parser:
|
||||
plugin = self.parser(self.source_file, lexer=self.lexer)
|
||||
dependencies = plugin.parse()
|
||||
return list(set(dependencies))
|
||||
return list(filter(bool, set(dependencies)))
|
||||
return []
|
||||
|
@ -70,6 +70,7 @@ class Heartbeat(object):
|
||||
'debugging',
|
||||
'running tests',
|
||||
'manual testing',
|
||||
'writing tests',
|
||||
'browsing',
|
||||
'code reviewing',
|
||||
'designing',
|
||||
|
@ -87,10 +87,10 @@ class Git(BaseProject):
|
||||
|
||||
disabled = self._configs.get('submodules_disabled')
|
||||
|
||||
if not disabled or disabled.strip().lower() == 'false':
|
||||
return True
|
||||
if disabled.strip().lower() == 'true':
|
||||
return False
|
||||
if disabled.strip().lower() == 'false':
|
||||
return True
|
||||
|
||||
for pattern in disabled.split("\n"):
|
||||
if pattern.strip():
|
||||
|
@ -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):
|
||||
|
Reference in New Issue
Block a user