support passing an alternate language to cli
This commit is contained in:
parent
e50b0bd1d8
commit
95a2db0a77
8 changed files with 748 additions and 23 deletions
|
@ -1,8 +1,10 @@
|
||||||
usage: wakatime [-h] [--entity FILE] [--key KEY] [--write] [--plugin PLUGIN]
|
usage: wakatime [-h] [--entity FILE] [--key KEY] [--write] [--plugin PLUGIN]
|
||||||
[--time time] [--lineno LINENO] [--cursorpos CURSORPOS]
|
[--time time] [--lineno LINENO] [--cursorpos CURSORPOS]
|
||||||
[--entitytype ENTITY_TYPE] [--proxy PROXY] [--project PROJECT]
|
[--entitytype ENTITY_TYPE] [--proxy PROXY] [--project PROJECT]
|
||||||
[--alternate-project ALTERNATE_PROJECT] [--hostname HOSTNAME]
|
[--alternate-project ALTERNATE_PROJECT]
|
||||||
[--disableoffline] [--hidefilenames] [--exclude EXCLUDE]
|
[--alternate-language ALTERNATE_LANGUAGE]
|
||||||
[--include INCLUDE] [--logfile LOGFILE] [--apiurl API_URL]
|
[--hostname HOSTNAME] [--disableoffline] [--hidefilenames]
|
||||||
[--timeout TIMEOUT] [--config CONFIG] [--verbose] [--version]
|
[--exclude EXCLUDE] [--include INCLUDE] [--logfile LOGFILE]
|
||||||
|
[--apiurl API_URL] [--timeout TIMEOUT] [--config CONFIG]
|
||||||
|
[--verbose] [--version]
|
||||||
wakatime: error: argument --timeout: invalid int value: 'abc'
|
wakatime: error: argument --timeout: invalid int value: 'abc'
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
usage: wakatime [-h] [--entity FILE] [--key KEY] [--write] [--plugin PLUGIN]
|
usage: wakatime [-h] [--entity FILE] [--key KEY] [--write] [--plugin PLUGIN]
|
||||||
[--time time] [--lineno LINENO] [--cursorpos CURSORPOS]
|
[--time time] [--lineno LINENO] [--cursorpos CURSORPOS]
|
||||||
[--entitytype ENTITY_TYPE] [--proxy PROXY] [--project PROJECT]
|
[--entitytype ENTITY_TYPE] [--proxy PROXY] [--project PROJECT]
|
||||||
[--alternate-project ALTERNATE_PROJECT] [--hostname HOSTNAME]
|
[--alternate-project ALTERNATE_PROJECT]
|
||||||
[--disableoffline] [--hidefilenames] [--exclude EXCLUDE]
|
[--alternate-language ALTERNATE_LANGUAGE]
|
||||||
[--include INCLUDE] [--logfile LOGFILE] [--apiurl API_URL]
|
[--hostname HOSTNAME] [--disableoffline] [--hidefilenames]
|
||||||
[--timeout TIMEOUT] [--config CONFIG] [--verbose] [--version]
|
[--exclude EXCLUDE] [--include INCLUDE] [--logfile LOGFILE]
|
||||||
|
[--apiurl API_URL] [--timeout TIMEOUT] [--config CONFIG]
|
||||||
|
[--verbose] [--version]
|
||||||
|
|
||||||
Common interface for the WakaTime api.
|
Common interface for the WakaTime api.
|
||||||
|
|
||||||
|
@ -32,6 +34,9 @@ optional arguments:
|
||||||
--alternate-project ALTERNATE_PROJECT
|
--alternate-project ALTERNATE_PROJECT
|
||||||
optional alternate project name; auto-discovered
|
optional alternate project name; auto-discovered
|
||||||
project takes priority
|
project takes priority
|
||||||
|
--alternate-language ALTERNATE_LANGUAGE
|
||||||
|
optional alternate language name; auto-detected
|
||||||
|
languagetakes priority
|
||||||
--hostname HOSTNAME hostname of current machine.
|
--hostname HOSTNAME hostname of current machine.
|
||||||
--disableoffline disables offline time logging instead of queuing
|
--disableoffline disables offline time logging instead of queuing
|
||||||
logged time
|
logged time
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
usage: wakatime [-h] [--entity FILE] [--key KEY] [--write] [--plugin PLUGIN]
|
usage: wakatime [-h] [--entity FILE] [--key KEY] [--write] [--plugin PLUGIN]
|
||||||
[--time time] [--lineno LINENO] [--cursorpos CURSORPOS]
|
[--time time] [--lineno LINENO] [--cursorpos CURSORPOS]
|
||||||
[--entitytype ENTITY_TYPE] [--proxy PROXY] [--project PROJECT]
|
[--entitytype ENTITY_TYPE] [--proxy PROXY] [--project PROJECT]
|
||||||
[--alternate-project ALTERNATE_PROJECT] [--hostname HOSTNAME]
|
[--alternate-project ALTERNATE_PROJECT]
|
||||||
[--disableoffline] [--hidefilenames] [--exclude EXCLUDE]
|
[--alternate-language ALTERNATE_LANGUAGE]
|
||||||
[--include INCLUDE] [--logfile LOGFILE] [--apiurl API_URL]
|
[--hostname HOSTNAME] [--disableoffline] [--hidefilenames]
|
||||||
[--timeout TIMEOUT] [--config CONFIG] [--verbose] [--version]
|
[--exclude EXCLUDE] [--include INCLUDE] [--logfile LOGFILE]
|
||||||
|
[--apiurl API_URL] [--timeout TIMEOUT] [--config CONFIG]
|
||||||
|
[--verbose] [--version]
|
||||||
wakatime: error: Missing api key
|
wakatime: error: Missing api key
|
||||||
|
|
|
@ -37,7 +37,7 @@ class LanguagesTestCase(utils.TestCase):
|
||||||
self.assertEquals(retval, 102)
|
self.assertEquals(retval, 102)
|
||||||
|
|
||||||
language = u('C')
|
language = u('C')
|
||||||
self.assertEqual(self.patched['wakatime.offlinequeue.Queue.push'].call_args[0][0]['language'], language)
|
self.assertEqual(self.patched['wakatime.offlinequeue.Queue.push'].call_args[0][0].get('language'), language)
|
||||||
|
|
||||||
entity = 'tests/samples/codefiles/seeplusplus.h'
|
entity = 'tests/samples/codefiles/seeplusplus.h'
|
||||||
args[1] = entity
|
args[1] = entity
|
||||||
|
@ -46,7 +46,7 @@ class LanguagesTestCase(utils.TestCase):
|
||||||
self.assertEquals(retval, 102)
|
self.assertEquals(retval, 102)
|
||||||
|
|
||||||
language = u('C++')
|
language = u('C++')
|
||||||
self.assertEqual(self.patched['wakatime.offlinequeue.Queue.push'].call_args[0][0]['language'], language)
|
self.assertEqual(self.patched['wakatime.offlinequeue.Queue.push'].call_args[0][0].get('language'), language)
|
||||||
|
|
||||||
def test_c_language_detected_for_header_with_c_files_in_folder(self):
|
def test_c_language_detected_for_header_with_c_files_in_folder(self):
|
||||||
response = Response()
|
response = Response()
|
||||||
|
@ -62,7 +62,7 @@ class LanguagesTestCase(utils.TestCase):
|
||||||
self.assertEquals(retval, 102)
|
self.assertEquals(retval, 102)
|
||||||
|
|
||||||
language = u('C')
|
language = u('C')
|
||||||
self.assertEqual(self.patched['wakatime.offlinequeue.Queue.push'].call_args[0][0]['language'], language)
|
self.assertEqual(self.patched['wakatime.offlinequeue.Queue.push'].call_args[0][0].get('language'), language)
|
||||||
|
|
||||||
def test_cpp_language_detected_for_header_with_c_and_cpp_files_in_folder(self):
|
def test_cpp_language_detected_for_header_with_c_and_cpp_files_in_folder(self):
|
||||||
response = Response()
|
response = Response()
|
||||||
|
@ -78,7 +78,7 @@ class LanguagesTestCase(utils.TestCase):
|
||||||
self.assertEquals(retval, 102)
|
self.assertEquals(retval, 102)
|
||||||
|
|
||||||
language = u('C++')
|
language = u('C++')
|
||||||
self.assertEqual(self.patched['wakatime.offlinequeue.Queue.push'].call_args[0][0]['language'], language)
|
self.assertEqual(self.patched['wakatime.offlinequeue.Queue.push'].call_args[0][0].get('language'), language)
|
||||||
|
|
||||||
def test_guess_language(self):
|
def test_guess_language(self):
|
||||||
with utils.mock.patch('wakatime.stats.smart_guess_lexer') as mock_guess_lexer:
|
with utils.mock.patch('wakatime.stats.smart_guess_lexer') as mock_guess_lexer:
|
||||||
|
@ -102,4 +102,58 @@ class LanguagesTestCase(utils.TestCase):
|
||||||
self.assertEquals(retval, 102)
|
self.assertEquals(retval, 102)
|
||||||
|
|
||||||
language = u('Python')
|
language = u('Python')
|
||||||
self.assertEqual(self.patched['wakatime.offlinequeue.Queue.push'].call_args[0][0]['language'], language)
|
self.assertEqual(self.patched['wakatime.offlinequeue.Queue.push'].call_args[0][0].get('language'), language)
|
||||||
|
|
||||||
|
def test_alternate_language_not_used_when_guessed(self):
|
||||||
|
response = Response()
|
||||||
|
response.status_code = 500
|
||||||
|
self.patched['wakatime.packages.requests.adapters.HTTPAdapter.send'].return_value = response
|
||||||
|
|
||||||
|
now = u(int(time.time()))
|
||||||
|
config = 'tests/samples/configs/good_config.cfg'
|
||||||
|
entity = 'tests/samples/codefiles/python.py'
|
||||||
|
args = ['--file', entity, '--config', config, '--time', now, '--alternate-language', 'java']
|
||||||
|
|
||||||
|
retval = execute(args)
|
||||||
|
self.assertEquals(retval, 102)
|
||||||
|
|
||||||
|
language = u('Python')
|
||||||
|
self.assertEqual(self.patched['wakatime.offlinequeue.Queue.push'].call_args[0][0].get('language'), language)
|
||||||
|
|
||||||
|
def test_alternate_language_is_used_when_not_guessed(self):
|
||||||
|
response = Response()
|
||||||
|
response.status_code = 500
|
||||||
|
self.patched['wakatime.packages.requests.adapters.HTTPAdapter.send'].return_value = response
|
||||||
|
|
||||||
|
with utils.mock.patch('wakatime.stats.smart_guess_lexer') as mock_guess_lexer:
|
||||||
|
mock_guess_lexer.return_value = None
|
||||||
|
|
||||||
|
now = u(int(time.time()))
|
||||||
|
config = 'tests/samples/configs/good_config.cfg'
|
||||||
|
entity = 'tests/samples/codefiles/python.py'
|
||||||
|
args = ['--file', entity, '--config', config, '--time', now, '--alternate-language', 'Java']
|
||||||
|
|
||||||
|
retval = execute(args)
|
||||||
|
self.assertEquals(retval, 102)
|
||||||
|
|
||||||
|
language = u('Java')
|
||||||
|
self.assertEqual(self.patched['wakatime.offlinequeue.Queue.push'].call_args[0][0].get('language'), language)
|
||||||
|
|
||||||
|
def test_vim_alternate_language_is_used_when_not_guessed(self):
|
||||||
|
response = Response()
|
||||||
|
response.status_code = 500
|
||||||
|
self.patched['wakatime.packages.requests.adapters.HTTPAdapter.send'].return_value = response
|
||||||
|
|
||||||
|
with utils.mock.patch('wakatime.stats.smart_guess_lexer') as mock_guess_lexer:
|
||||||
|
mock_guess_lexer.return_value = None
|
||||||
|
|
||||||
|
now = u(int(time.time()))
|
||||||
|
config = 'tests/samples/configs/good_config.cfg'
|
||||||
|
entity = 'tests/samples/codefiles/python.py'
|
||||||
|
args = ['--file', entity, '--config', config, '--time', now, '--alternate-language', 'java', '--plugin', 'NeoVim/703 vim-wakatime/4.0.9']
|
||||||
|
|
||||||
|
retval = execute(args)
|
||||||
|
self.assertEquals(retval, 102)
|
||||||
|
|
||||||
|
language = u('Java')
|
||||||
|
self.assertEqual(self.patched['wakatime.offlinequeue.Queue.push'].call_args[0][0].get('language'), language)
|
||||||
|
|
80
wakatime/languages/default.json
Normal file
80
wakatime/languages/default.json
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
{
|
||||||
|
"ActionScript": "ActionScript",
|
||||||
|
"ApacheConf": "ApacheConf",
|
||||||
|
"AppleScript": "AppleScript",
|
||||||
|
"ASP": "ASP",
|
||||||
|
"Assembly": "Assembly",
|
||||||
|
"Awk": "Awk",
|
||||||
|
"Bash": "Bash",
|
||||||
|
"Basic": "Basic",
|
||||||
|
"BrightScript": "BrightScript",
|
||||||
|
"C": "C",
|
||||||
|
"C#": "C#",
|
||||||
|
"C++": "C++",
|
||||||
|
"Clojure": "Clojure",
|
||||||
|
"Cocoa": "Cocoa",
|
||||||
|
"CoffeeScript": "CoffeeScript",
|
||||||
|
"ColdFusion": "ColdFusion",
|
||||||
|
"Common Lisp": "Common Lisp",
|
||||||
|
"CSHTML": "CSHTML",
|
||||||
|
"CSS": "CSS",
|
||||||
|
"Dart": "Dart",
|
||||||
|
"Delphi": "Delphi",
|
||||||
|
"Elixir": "Elixir",
|
||||||
|
"Elm": "Elm",
|
||||||
|
"Emacs Lisp": "Emacs Lisp",
|
||||||
|
"Erlang": "Erlang",
|
||||||
|
"F#": "F#",
|
||||||
|
"Fortran": "Fortran",
|
||||||
|
"Go": "Go",
|
||||||
|
"Gous": "Gosu",
|
||||||
|
"Groovy": "Groovy",
|
||||||
|
"Haml": "Haml",
|
||||||
|
"HaXe": "HaXe",
|
||||||
|
"Haskell": "Haskell",
|
||||||
|
"HTML": "HTML",
|
||||||
|
"INI": "INI",
|
||||||
|
"Jade": "Jade",
|
||||||
|
"Java": "Java",
|
||||||
|
"JavaScript": "JavaScript",
|
||||||
|
"JSON": "JSON",
|
||||||
|
"JSX": "JSX",
|
||||||
|
"Kotlin": "Kotlin",
|
||||||
|
"LESS": "LESS",
|
||||||
|
"Lua": "Lua",
|
||||||
|
"Markdown": "Markdown",
|
||||||
|
"Matlab": "Matlab",
|
||||||
|
"Mustache": "Mustache",
|
||||||
|
"OCaml": "OCaml",
|
||||||
|
"Objective-C": "Objective-C",
|
||||||
|
"Objective-C++": "Objective-C++",
|
||||||
|
"Objective-J": "Objective-J",
|
||||||
|
"Perl": "Perl",
|
||||||
|
"PHP": "PHP",
|
||||||
|
"PowerShell": "PowerShell",
|
||||||
|
"Prolog": "Prolog",
|
||||||
|
"Puppet": "Puppet",
|
||||||
|
"Python": "Python",
|
||||||
|
"R": "R",
|
||||||
|
"reStructuredText": "reStructuredText",
|
||||||
|
"Ruby": "Ruby",
|
||||||
|
"Rust": "Rust",
|
||||||
|
"Sass": "Sass",
|
||||||
|
"Scala": "Scala",
|
||||||
|
"Scheme": "Scheme",
|
||||||
|
"SCSS": "SCSS",
|
||||||
|
"Shell": "Shell",
|
||||||
|
"Slim": "Slim",
|
||||||
|
"Smalltalk": "Smalltalk",
|
||||||
|
"SQL": "SQL",
|
||||||
|
"Swift": "Swift",
|
||||||
|
"Text": "Text",
|
||||||
|
"Turing": "Turing",
|
||||||
|
"Twig": "Twig",
|
||||||
|
"TypeScript": "TypeScript",
|
||||||
|
"VB.net": "VB.net",
|
||||||
|
"VimL": "VimL",
|
||||||
|
"XAML": "XAML",
|
||||||
|
"XML": "XML",
|
||||||
|
"YAML": "YAML"
|
||||||
|
}
|
531
wakatime/languages/vim.json
Normal file
531
wakatime/languages/vim.json
Normal file
|
@ -0,0 +1,531 @@
|
||||||
|
{
|
||||||
|
"a2ps": null,
|
||||||
|
"a65": "Assembly",
|
||||||
|
"aap": null,
|
||||||
|
"abap": null,
|
||||||
|
"abaqus": null,
|
||||||
|
"abc": null,
|
||||||
|
"abel": null,
|
||||||
|
"acedb": null,
|
||||||
|
"ada": null,
|
||||||
|
"aflex": null,
|
||||||
|
"ahdl": null,
|
||||||
|
"alsaconf": null,
|
||||||
|
"amiga": null,
|
||||||
|
"aml": null,
|
||||||
|
"ampl": null,
|
||||||
|
"ant": null,
|
||||||
|
"antlr": null,
|
||||||
|
"apache": null,
|
||||||
|
"apachestyle": null,
|
||||||
|
"arch": null,
|
||||||
|
"art": null,
|
||||||
|
"asm": "Assembly",
|
||||||
|
"asm68k": "Assembly",
|
||||||
|
"asmh8300": "Assembly",
|
||||||
|
"asn": null,
|
||||||
|
"aspperl": null,
|
||||||
|
"aspvbs": null,
|
||||||
|
"asterisk": null,
|
||||||
|
"asteriskvm": null,
|
||||||
|
"atlas": null,
|
||||||
|
"autohotkey": null,
|
||||||
|
"autoit": null,
|
||||||
|
"automake": null,
|
||||||
|
"ave": null,
|
||||||
|
"awk": null,
|
||||||
|
"ayacc": null,
|
||||||
|
"b": null,
|
||||||
|
"baan": null,
|
||||||
|
"basic": "Basic",
|
||||||
|
"bc": null,
|
||||||
|
"bdf": null,
|
||||||
|
"bib": null,
|
||||||
|
"bindzone": null,
|
||||||
|
"blank": null,
|
||||||
|
"bst": null,
|
||||||
|
"btm": null,
|
||||||
|
"bzr": null,
|
||||||
|
"c": "C",
|
||||||
|
"cabal": null,
|
||||||
|
"calendar": null,
|
||||||
|
"catalog": null,
|
||||||
|
"cdl": null,
|
||||||
|
"cdrdaoconf": null,
|
||||||
|
"cdrtoc": null,
|
||||||
|
"cf": null,
|
||||||
|
"cfg": null,
|
||||||
|
"ch": null,
|
||||||
|
"chaiscript": null,
|
||||||
|
"change": null,
|
||||||
|
"changelog": null,
|
||||||
|
"chaskell": null,
|
||||||
|
"cheetah": null,
|
||||||
|
"chill": null,
|
||||||
|
"chordpro": null,
|
||||||
|
"cl": null,
|
||||||
|
"clean": null,
|
||||||
|
"clipper": null,
|
||||||
|
"cmake": null,
|
||||||
|
"cmusrc": null,
|
||||||
|
"cobol": null,
|
||||||
|
"coco": null,
|
||||||
|
"conaryrecipe": null,
|
||||||
|
"conf": null,
|
||||||
|
"config": null,
|
||||||
|
"context": null,
|
||||||
|
"cpp": "C++",
|
||||||
|
"crm": null,
|
||||||
|
"crontab": "Crontab",
|
||||||
|
"cs": "C#",
|
||||||
|
"csc": null,
|
||||||
|
"csh": null,
|
||||||
|
"csp": null,
|
||||||
|
"css": null,
|
||||||
|
"cterm": null,
|
||||||
|
"ctrlh": null,
|
||||||
|
"cucumber": null,
|
||||||
|
"cuda": null,
|
||||||
|
"cupl": null,
|
||||||
|
"cuplsim": null,
|
||||||
|
"cvs": null,
|
||||||
|
"cvsrc": null,
|
||||||
|
"cweb": null,
|
||||||
|
"cynlib": null,
|
||||||
|
"cynpp": null,
|
||||||
|
"d": null,
|
||||||
|
"datascript": null,
|
||||||
|
"dcd": null,
|
||||||
|
"dcl": null,
|
||||||
|
"debchangelog": null,
|
||||||
|
"debcontrol": null,
|
||||||
|
"debsources": null,
|
||||||
|
"def": null,
|
||||||
|
"denyhosts": null,
|
||||||
|
"desc": null,
|
||||||
|
"desktop": null,
|
||||||
|
"dictconf": null,
|
||||||
|
"dictdconf": null,
|
||||||
|
"diff": null,
|
||||||
|
"dircolors": null,
|
||||||
|
"diva": null,
|
||||||
|
"django": null,
|
||||||
|
"dns": null,
|
||||||
|
"docbk": null,
|
||||||
|
"docbksgml": null,
|
||||||
|
"docbkxml": null,
|
||||||
|
"dosbatch": null,
|
||||||
|
"dosini": null,
|
||||||
|
"dot": null,
|
||||||
|
"doxygen": null,
|
||||||
|
"dracula": null,
|
||||||
|
"dsl": null,
|
||||||
|
"dtd": null,
|
||||||
|
"dtml": null,
|
||||||
|
"dtrace": null,
|
||||||
|
"dylan": null,
|
||||||
|
"dylanintr": null,
|
||||||
|
"dylanlid": null,
|
||||||
|
"ecd": null,
|
||||||
|
"edif": null,
|
||||||
|
"eiffel": null,
|
||||||
|
"elf": null,
|
||||||
|
"elinks": null,
|
||||||
|
"elmfilt": null,
|
||||||
|
"erlang": null,
|
||||||
|
"eruby": null,
|
||||||
|
"esmtprc": null,
|
||||||
|
"esqlc": null,
|
||||||
|
"esterel": null,
|
||||||
|
"eterm": null,
|
||||||
|
"eviews": null,
|
||||||
|
"exim": null,
|
||||||
|
"expect": null,
|
||||||
|
"exports": null,
|
||||||
|
"fan": null,
|
||||||
|
"fasm": null,
|
||||||
|
"fdcc": null,
|
||||||
|
"fetchmail": null,
|
||||||
|
"fgl": null,
|
||||||
|
"flexwiki": null,
|
||||||
|
"focexec": null,
|
||||||
|
"form": null,
|
||||||
|
"forth": null,
|
||||||
|
"fortran": null,
|
||||||
|
"foxpro": null,
|
||||||
|
"framescript": null,
|
||||||
|
"freebasic": null,
|
||||||
|
"fstab": null,
|
||||||
|
"fvwm": null,
|
||||||
|
"fvwm2m4": null,
|
||||||
|
"gdb": null,
|
||||||
|
"gdmo": null,
|
||||||
|
"gedcom": null,
|
||||||
|
"git": null,
|
||||||
|
"gitcommit": null,
|
||||||
|
"gitconfig": null,
|
||||||
|
"gitrebase": null,
|
||||||
|
"gitsendemail": null,
|
||||||
|
"gkrellmrc": null,
|
||||||
|
"gnuplot": null,
|
||||||
|
"gp": null,
|
||||||
|
"gpg": null,
|
||||||
|
"grads": null,
|
||||||
|
"gretl": null,
|
||||||
|
"groff": null,
|
||||||
|
"groovy": null,
|
||||||
|
"group": null,
|
||||||
|
"grub": null,
|
||||||
|
"gsp": null,
|
||||||
|
"gtkrc": null,
|
||||||
|
"haml": "Haml",
|
||||||
|
"hamster": null,
|
||||||
|
"haskell": "Haskell",
|
||||||
|
"haste": null,
|
||||||
|
"hastepreproc": null,
|
||||||
|
"hb": null,
|
||||||
|
"help": null,
|
||||||
|
"hercules": null,
|
||||||
|
"hex": null,
|
||||||
|
"hog": null,
|
||||||
|
"hostconf": null,
|
||||||
|
"html": "HTML",
|
||||||
|
"htmlcheetah": "HTML",
|
||||||
|
"htmldjango": "HTML",
|
||||||
|
"htmlm4": "HTML",
|
||||||
|
"htmlos": null,
|
||||||
|
"ia64": null,
|
||||||
|
"ibasic": null,
|
||||||
|
"icemenu": null,
|
||||||
|
"icon": null,
|
||||||
|
"idl": null,
|
||||||
|
"idlang": null,
|
||||||
|
"indent": null,
|
||||||
|
"inform": null,
|
||||||
|
"initex": null,
|
||||||
|
"initng": null,
|
||||||
|
"inittab": null,
|
||||||
|
"ipfilter": null,
|
||||||
|
"ishd": null,
|
||||||
|
"iss": null,
|
||||||
|
"ist": null,
|
||||||
|
"jal": null,
|
||||||
|
"jam": null,
|
||||||
|
"jargon": null,
|
||||||
|
"java": "Java",
|
||||||
|
"javacc": null,
|
||||||
|
"javascript": "JavaScript",
|
||||||
|
"jess": null,
|
||||||
|
"jgraph": null,
|
||||||
|
"jproperties": null,
|
||||||
|
"jsp": null,
|
||||||
|
"kconfig": null,
|
||||||
|
"kix": null,
|
||||||
|
"kscript": null,
|
||||||
|
"kwt": null,
|
||||||
|
"lace": null,
|
||||||
|
"latte": null,
|
||||||
|
"ld": null,
|
||||||
|
"ldapconf": null,
|
||||||
|
"ldif": null,
|
||||||
|
"lex": null,
|
||||||
|
"lftp": null,
|
||||||
|
"lhaskell": "Haskell",
|
||||||
|
"libao": null,
|
||||||
|
"lifelines": null,
|
||||||
|
"lilo": null,
|
||||||
|
"limits": null,
|
||||||
|
"liquid": null,
|
||||||
|
"lisp": null,
|
||||||
|
"lite": null,
|
||||||
|
"litestep": null,
|
||||||
|
"loginaccess": null,
|
||||||
|
"logindefs": null,
|
||||||
|
"logtalk": null,
|
||||||
|
"lotos": null,
|
||||||
|
"lout": null,
|
||||||
|
"lpc": null,
|
||||||
|
"lprolog": null,
|
||||||
|
"lscript": null,
|
||||||
|
"lsl": null,
|
||||||
|
"lss": null,
|
||||||
|
"lua": null,
|
||||||
|
"lynx": null,
|
||||||
|
"m4": null,
|
||||||
|
"mail": null,
|
||||||
|
"mailaliases": null,
|
||||||
|
"mailcap": null,
|
||||||
|
"make": null,
|
||||||
|
"man": null,
|
||||||
|
"manconf": null,
|
||||||
|
"manual": null,
|
||||||
|
"maple": null,
|
||||||
|
"markdown": "Markdown",
|
||||||
|
"masm": null,
|
||||||
|
"mason": null,
|
||||||
|
"master": null,
|
||||||
|
"matlab": null,
|
||||||
|
"maxima": null,
|
||||||
|
"mel": null,
|
||||||
|
"messages": null,
|
||||||
|
"mf": null,
|
||||||
|
"mgl": null,
|
||||||
|
"mgp": null,
|
||||||
|
"mib": null,
|
||||||
|
"mma": null,
|
||||||
|
"mmix": null,
|
||||||
|
"mmp": null,
|
||||||
|
"modconf": null,
|
||||||
|
"model": null,
|
||||||
|
"modsim3": null,
|
||||||
|
"modula2": null,
|
||||||
|
"modula3": null,
|
||||||
|
"monk": null,
|
||||||
|
"moo": null,
|
||||||
|
"mp": null,
|
||||||
|
"mplayerconf": null,
|
||||||
|
"mrxvtrc": null,
|
||||||
|
"msidl": null,
|
||||||
|
"msmessages": null,
|
||||||
|
"msql": null,
|
||||||
|
"mupad": null,
|
||||||
|
"mush": null,
|
||||||
|
"muttrc": null,
|
||||||
|
"mysql": null,
|
||||||
|
"named": null,
|
||||||
|
"nanorc": null,
|
||||||
|
"nasm": null,
|
||||||
|
"nastran": null,
|
||||||
|
"natural": null,
|
||||||
|
"ncf": null,
|
||||||
|
"netrc": null,
|
||||||
|
"netrw": null,
|
||||||
|
"nosyntax": null,
|
||||||
|
"nqc": null,
|
||||||
|
"nroff": null,
|
||||||
|
"nsis": null,
|
||||||
|
"obj": null,
|
||||||
|
"objc": "Objective-C",
|
||||||
|
"objcpp": "Objective-C++",
|
||||||
|
"ocaml": "OCaml",
|
||||||
|
"occam": null,
|
||||||
|
"omnimark": null,
|
||||||
|
"openroad": null,
|
||||||
|
"opl": null,
|
||||||
|
"ora": null,
|
||||||
|
"pamconf": null,
|
||||||
|
"papp": null,
|
||||||
|
"pascal": null,
|
||||||
|
"passwd": null,
|
||||||
|
"pcap": null,
|
||||||
|
"pccts": null,
|
||||||
|
"pdf": null,
|
||||||
|
"perl": "Perl",
|
||||||
|
"perl6": "Perl",
|
||||||
|
"pf": null,
|
||||||
|
"pfmain": null,
|
||||||
|
"php": "PHP",
|
||||||
|
"phtml": "PHP",
|
||||||
|
"pic": null,
|
||||||
|
"pike": null,
|
||||||
|
"pilrc": null,
|
||||||
|
"pine": null,
|
||||||
|
"pinfo": null,
|
||||||
|
"plaintex": null,
|
||||||
|
"plm": null,
|
||||||
|
"plp": null,
|
||||||
|
"plsql": null,
|
||||||
|
"po": null,
|
||||||
|
"pod": null,
|
||||||
|
"postscr": null,
|
||||||
|
"pov": null,
|
||||||
|
"povini": null,
|
||||||
|
"ppd": null,
|
||||||
|
"ppwiz": null,
|
||||||
|
"prescribe": null,
|
||||||
|
"privoxy": null,
|
||||||
|
"procmail": null,
|
||||||
|
"progress": null,
|
||||||
|
"prolog": "Prolog",
|
||||||
|
"promela": null,
|
||||||
|
"protocols": null,
|
||||||
|
"psf": null,
|
||||||
|
"ptcap": null,
|
||||||
|
"purifylog": null,
|
||||||
|
"pyrex": null,
|
||||||
|
"python": "Python",
|
||||||
|
"qf": null,
|
||||||
|
"quake": null,
|
||||||
|
"r": "R",
|
||||||
|
"racc": null,
|
||||||
|
"radiance": null,
|
||||||
|
"ratpoison": null,
|
||||||
|
"rc": null,
|
||||||
|
"rcs": null,
|
||||||
|
"rcslog": null,
|
||||||
|
"readline": null,
|
||||||
|
"rebol": null,
|
||||||
|
"registry": null,
|
||||||
|
"remind": null,
|
||||||
|
"resolv": null,
|
||||||
|
"reva": null,
|
||||||
|
"rexx": null,
|
||||||
|
"rhelp": null,
|
||||||
|
"rib": null,
|
||||||
|
"rnc": null,
|
||||||
|
"rnoweb": null,
|
||||||
|
"robots": null,
|
||||||
|
"rpcgen": null,
|
||||||
|
"rpl": null,
|
||||||
|
"rst": null,
|
||||||
|
"rtf": null,
|
||||||
|
"ruby": "Ruby",
|
||||||
|
"samba": null,
|
||||||
|
"sas": null,
|
||||||
|
"sass": "Sass",
|
||||||
|
"sather": null,
|
||||||
|
"scheme": "Scheme",
|
||||||
|
"scilab": null,
|
||||||
|
"screen": null,
|
||||||
|
"scss": "SCSS",
|
||||||
|
"sd": null,
|
||||||
|
"sdc": null,
|
||||||
|
"sdl": null,
|
||||||
|
"sed": null,
|
||||||
|
"sendpr": null,
|
||||||
|
"sensors": null,
|
||||||
|
"services": null,
|
||||||
|
"setserial": null,
|
||||||
|
"sgml": null,
|
||||||
|
"sgmldecl": null,
|
||||||
|
"sgmllnx": null,
|
||||||
|
"sh": null,
|
||||||
|
"sicad": null,
|
||||||
|
"sieve": null,
|
||||||
|
"simula": null,
|
||||||
|
"sinda": null,
|
||||||
|
"sindacmp": null,
|
||||||
|
"sindaout": null,
|
||||||
|
"sisu": null,
|
||||||
|
"skill": "SKILL",
|
||||||
|
"sl": null,
|
||||||
|
"slang": null,
|
||||||
|
"slice": null,
|
||||||
|
"slpconf": null,
|
||||||
|
"slpreg": null,
|
||||||
|
"slpspi": null,
|
||||||
|
"slrnrc": null,
|
||||||
|
"slrnsc": null,
|
||||||
|
"sm": null,
|
||||||
|
"smarty": null,
|
||||||
|
"smcl": null,
|
||||||
|
"smil": null,
|
||||||
|
"smith": null,
|
||||||
|
"sml": null,
|
||||||
|
"snnsnet": null,
|
||||||
|
"snnspat": null,
|
||||||
|
"snnsres": null,
|
||||||
|
"snobol4": null,
|
||||||
|
"spec": null,
|
||||||
|
"specman": null,
|
||||||
|
"spice": null,
|
||||||
|
"splint": null,
|
||||||
|
"spup": null,
|
||||||
|
"spyce": null,
|
||||||
|
"sql": null,
|
||||||
|
"sqlanywhere": null,
|
||||||
|
"sqlforms": null,
|
||||||
|
"sqlinformix": null,
|
||||||
|
"sqlj": null,
|
||||||
|
"sqloracle": null,
|
||||||
|
"sqr": null,
|
||||||
|
"squid": null,
|
||||||
|
"sshconfig": null,
|
||||||
|
"sshdconfig": null,
|
||||||
|
"st": null,
|
||||||
|
"stata": null,
|
||||||
|
"stp": null,
|
||||||
|
"strace": null,
|
||||||
|
"sudoers": null,
|
||||||
|
"svg": null,
|
||||||
|
"svn": null,
|
||||||
|
"syncolor": null,
|
||||||
|
"synload": null,
|
||||||
|
"syntax": null,
|
||||||
|
"sysctl": null,
|
||||||
|
"tads": null,
|
||||||
|
"tags": null,
|
||||||
|
"tak": null,
|
||||||
|
"takcmp": null,
|
||||||
|
"takout": null,
|
||||||
|
"tar": null,
|
||||||
|
"taskdata": null,
|
||||||
|
"taskedit": null,
|
||||||
|
"tasm": null,
|
||||||
|
"tcl": null,
|
||||||
|
"tcsh": null,
|
||||||
|
"terminfo": null,
|
||||||
|
"tex": null,
|
||||||
|
"texinfo": null,
|
||||||
|
"texmf": null,
|
||||||
|
"tf": null,
|
||||||
|
"tidy": null,
|
||||||
|
"tilde": null,
|
||||||
|
"tli": null,
|
||||||
|
"tpp": null,
|
||||||
|
"trasys": null,
|
||||||
|
"trustees": null,
|
||||||
|
"tsalt": null,
|
||||||
|
"tsscl": null,
|
||||||
|
"tssgm": null,
|
||||||
|
"tssop": null,
|
||||||
|
"uc": null,
|
||||||
|
"udevconf": null,
|
||||||
|
"udevperm": null,
|
||||||
|
"udevrules": null,
|
||||||
|
"uil": null,
|
||||||
|
"updatedb": null,
|
||||||
|
"valgrind": null,
|
||||||
|
"vb": "VB.net",
|
||||||
|
"vera": null,
|
||||||
|
"verilog": null,
|
||||||
|
"verilogams": null,
|
||||||
|
"vgrindefs": null,
|
||||||
|
"vhdl": null,
|
||||||
|
"vim": "VimL",
|
||||||
|
"viminfo": null,
|
||||||
|
"virata": null,
|
||||||
|
"vmasm": null,
|
||||||
|
"voscm": null,
|
||||||
|
"vrml": null,
|
||||||
|
"vsejcl": null,
|
||||||
|
"wdiff": null,
|
||||||
|
"web": null,
|
||||||
|
"webmacro": null,
|
||||||
|
"wget": null,
|
||||||
|
"winbatch": null,
|
||||||
|
"wml": null,
|
||||||
|
"wsh": null,
|
||||||
|
"wsml": null,
|
||||||
|
"wvdial": null,
|
||||||
|
"xbl": null,
|
||||||
|
"xdefaults": null,
|
||||||
|
"xf86conf": null,
|
||||||
|
"xhtml": "HTML",
|
||||||
|
"xinetd": null,
|
||||||
|
"xkb": null,
|
||||||
|
"xmath": null,
|
||||||
|
"xml": "XML",
|
||||||
|
"xmodmap": null,
|
||||||
|
"xpm": null,
|
||||||
|
"xpm2": null,
|
||||||
|
"xquery": null,
|
||||||
|
"xs": null,
|
||||||
|
"xsd": null,
|
||||||
|
"xslt": null,
|
||||||
|
"xxd": null,
|
||||||
|
"yacc": null,
|
||||||
|
"yaml": "YAML",
|
||||||
|
"z8a": null,
|
||||||
|
"zsh": null
|
||||||
|
}
|
|
@ -133,6 +133,9 @@ def parseArguments():
|
||||||
parser.add_argument('--alternate-project', dest='alternate_project',
|
parser.add_argument('--alternate-project', dest='alternate_project',
|
||||||
help='optional alternate project name; auto-discovered project '+
|
help='optional alternate project name; auto-discovered project '+
|
||||||
'takes priority')
|
'takes priority')
|
||||||
|
parser.add_argument('--alternate-language', dest='alternate_language',
|
||||||
|
help='optional alternate language name; auto-detected language'+
|
||||||
|
'takes priority')
|
||||||
parser.add_argument('--hostname', dest='hostname', help='hostname of '+
|
parser.add_argument('--hostname', dest='hostname', help='hostname of '+
|
||||||
'current machine.')
|
'current machine.')
|
||||||
parser.add_argument('--disableoffline', dest='offline',
|
parser.add_argument('--disableoffline', dest='offline',
|
||||||
|
@ -471,7 +474,9 @@ def execute(argv=None):
|
||||||
stats = get_file_stats(args.entity,
|
stats = get_file_stats(args.entity,
|
||||||
entity_type=args.entity_type,
|
entity_type=args.entity_type,
|
||||||
lineno=args.lineno,
|
lineno=args.lineno,
|
||||||
cursorpos=args.cursorpos)
|
cursorpos=args.cursorpos,
|
||||||
|
plugin=args.plugin,
|
||||||
|
alternate_language=args.alternate_language)
|
||||||
|
|
||||||
project = args.project or args.alternate_project
|
project = args.project or args.alternate_project
|
||||||
branch = None
|
branch = None
|
||||||
|
|
|
@ -23,6 +23,11 @@ from .packages import (
|
||||||
ClassNotFound,
|
ClassNotFound,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
try:
|
||||||
|
from .packages import simplejson as json # pragma: nocover
|
||||||
|
except (ImportError, SyntaxError): # pragma: nocover
|
||||||
|
import json
|
||||||
|
|
||||||
|
|
||||||
log = logging.getLogger('WakaTime')
|
log = logging.getLogger('WakaTime')
|
||||||
|
|
||||||
|
@ -50,7 +55,7 @@ def smart_guess_lexer(file_name):
|
||||||
"""
|
"""
|
||||||
lexer = None
|
lexer = None
|
||||||
|
|
||||||
text = get_file_contents(file_name)
|
text = get_file_head(file_name)
|
||||||
|
|
||||||
lexer1, accuracy1 = guess_lexer_using_filename(file_name, text)
|
lexer1, accuracy1 = guess_lexer_using_filename(file_name, text)
|
||||||
lexer2, accuracy2 = guess_lexer_using_modeline(text)
|
lexer2, accuracy2 = guess_lexer_using_modeline(text)
|
||||||
|
@ -154,7 +159,8 @@ def number_lines_in_file(file_name):
|
||||||
return lines
|
return lines
|
||||||
|
|
||||||
|
|
||||||
def get_file_stats(file_name, entity_type='file', lineno=None, cursorpos=None):
|
def get_file_stats(file_name, entity_type='file', lineno=None, cursorpos=None,
|
||||||
|
plugin=None, alternate_language=None):
|
||||||
if entity_type != 'file':
|
if entity_type != 'file':
|
||||||
stats = {
|
stats = {
|
||||||
'language': None,
|
'language': None,
|
||||||
|
@ -167,6 +173,8 @@ def get_file_stats(file_name, entity_type='file', lineno=None, cursorpos=None):
|
||||||
language, lexer = guess_language(file_name)
|
language, lexer = guess_language(file_name)
|
||||||
parser = DependencyParser(file_name, lexer)
|
parser = DependencyParser(file_name, lexer)
|
||||||
dependencies = parser.parse()
|
dependencies = parser.parse()
|
||||||
|
if language is None and alternate_language:
|
||||||
|
language = standardize_language(alternate_language, plugin)
|
||||||
stats = {
|
stats = {
|
||||||
'language': language,
|
'language': language,
|
||||||
'dependencies': dependencies,
|
'dependencies': dependencies,
|
||||||
|
@ -177,9 +185,47 @@ def get_file_stats(file_name, entity_type='file', lineno=None, cursorpos=None):
|
||||||
return stats
|
return stats
|
||||||
|
|
||||||
|
|
||||||
def get_file_contents(file_name):
|
def standardize_language(language, plugin):
|
||||||
"""Returns the first 512000 bytes of the file's contents.
|
"""Maps a string to the equivalent Pygments language."""
|
||||||
"""
|
|
||||||
|
# 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
|
||||||
|
|
||||||
|
# standardize language against default languages
|
||||||
|
standardized = get_language_from_json(language, 'default')
|
||||||
|
if standardized is not None:
|
||||||
|
return standardized
|
||||||
|
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def get_language_from_json(language, key):
|
||||||
|
"""Finds the given language in a json file."""
|
||||||
|
|
||||||
|
file_name = os.path.join(
|
||||||
|
os.path.dirname(__file__),
|
||||||
|
'languages',
|
||||||
|
'{0}.json').format(key.lower())
|
||||||
|
|
||||||
|
try:
|
||||||
|
with open(file_name, 'r', encoding='utf-8') as fh:
|
||||||
|
languages = json.loads(fh.read())
|
||||||
|
if language in languages.values():
|
||||||
|
return language
|
||||||
|
if languages.get(language):
|
||||||
|
return languages[language]
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def get_file_head(file_name):
|
||||||
|
"""Returns the first 512000 bytes of the file's contents."""
|
||||||
|
|
||||||
text = None
|
text = None
|
||||||
try:
|
try:
|
||||||
|
|
Loading…
Reference in a new issue