fix: Listeners
implement: syntax change only if not currently a syntax
This commit is contained in:
parent
8f6a38b8d3
commit
1c2d2262db
|
@ -16,7 +16,6 @@
|
||||||
"reindent_block": "minimal",
|
"reindent_block": "minimal",
|
||||||
// Name or Path to jq binary
|
// Name or Path to jq binary
|
||||||
// Example: /usr/bin/local/jq
|
// Example: /usr/bin/local/jq
|
||||||
// Example: jq
|
|
||||||
"jq_binary": "jq",
|
"jq_binary": "jq",
|
||||||
"jq_errors": false,
|
"jq_errors": false,
|
||||||
"as_json":[
|
"as_json":[
|
||||||
|
|
|
@ -50,9 +50,10 @@ class PrettyJsonBaseCommand:
|
||||||
bracket_newline = re.compile(r'^((\s*)".*?":)\s*([\[])', re.MULTILINE)
|
bracket_newline = re.compile(r'^((\s*)".*?":)\s*([\[])', re.MULTILINE)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def json_loads(selection: str) -> dict:
|
def json_loads(selection: str, object_pairs_hook=None) -> dict:
|
||||||
|
hook = OrderedDict if object_pairs_hook is None else object_pairs_hook
|
||||||
return json.loads(
|
return json.loads(
|
||||||
selection, object_pairs_hook=OrderedDict, parse_float=decimal.Decimal
|
selection, object_pairs_hook=hook, parse_float=decimal.Decimal
|
||||||
)
|
)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
@ -188,12 +189,15 @@ class PrettyJsonBaseCommand:
|
||||||
self.phantom_set.update(self.phantoms)
|
self.phantom_set.update(self.phantoms)
|
||||||
|
|
||||||
def syntax_to_json(self):
|
def syntax_to_json(self):
|
||||||
self.view.set_syntax_file(json_syntax)
|
syntax = os.path.splitext(os.path.basename(self.view.settings().get('syntax')))[0]
|
||||||
|
as_json = [i.lower() for i in s.get('as_json', ['JSON'])]
|
||||||
|
if syntax.lower() not in as_json:
|
||||||
|
self.view.set_syntax_file(json_syntax)
|
||||||
|
|
||||||
|
|
||||||
class PrettyJsonValidate(PrettyJsonBaseCommand, sublime_plugin.TextCommand):
|
class PrettyJsonValidate(PrettyJsonBaseCommand, sublime_plugin.TextCommand):
|
||||||
def run(self, edit):
|
def run(self, edit):
|
||||||
self.clear_phantoms(self)
|
self.clear_phantoms()
|
||||||
regions = self.view.sel()
|
regions = self.view.sel()
|
||||||
for region in regions:
|
for region in regions:
|
||||||
region, _ = self.get_selection_from_region(
|
region, _ = self.get_selection_from_region(
|
||||||
|
@ -204,14 +208,7 @@ class PrettyJsonValidate(PrettyJsonBaseCommand, sublime_plugin.TextCommand):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self.json_loads(self.view.substr(region))
|
self.json_loads(self.view.substr(region), self.duplicate_key_hook)
|
||||||
except Exception as ex:
|
|
||||||
self.show_exception(region=region, msg=ex)
|
|
||||||
return
|
|
||||||
|
|
||||||
try:
|
|
||||||
decoder = json.JSONDecoder(object_pairs_hook=self.duplicate_key_hook)
|
|
||||||
decoder.decode(self.view.substr(region))
|
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
self.show_exception(region=region, msg=ex)
|
self.show_exception(region=region, msg=ex)
|
||||||
return
|
return
|
||||||
|
@ -258,18 +255,18 @@ class PrettyJsonCommand(PrettyJsonBaseCommand, sublime_plugin.TextCommand):
|
||||||
|
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
try:
|
try:
|
||||||
amount_of_single_quotes = re.findall(
|
count_single_quotes = re.findall(
|
||||||
r"(\'[^\']+\'?)", selection_text
|
r"(\'[^\']+\'?)", selection_text
|
||||||
)
|
)
|
||||||
amount_of_double_quotes = re.findall(
|
amount_of_double_quotes = re.findall(
|
||||||
r"(\"[^\"]+\"?)", selection_text
|
r"(\"[^\"]+\"?)", selection_text
|
||||||
)
|
)
|
||||||
|
|
||||||
if len(amount_of_single_quotes) >= len(amount_of_double_quotes):
|
if len(count_single_quotes) >= len(amount_of_double_quotes):
|
||||||
selection_text_modified = re.sub(
|
modified_text = re.sub(
|
||||||
r"(?:\'([^\']+)\'?)", r'"\1"', selection_text
|
r"(?:\'([^\']+)\'?)", r'"\1"', selection_text
|
||||||
)
|
)
|
||||||
obj = self.json_loads(selection_text_modified)
|
obj = self.json_loads(modified_text)
|
||||||
json_text = self.json_dumps(obj=obj, minified=False)
|
json_text = self.json_dumps(obj=obj, minified=False)
|
||||||
|
|
||||||
if not entire_file and s.get('reindent_block', False):
|
if not entire_file and s.get('reindent_block', False):
|
||||||
|
|
|
@ -15,7 +15,7 @@ class PrettyJsonLintListener(sublime_plugin.EventListener, PrettyJsonBaseCommand
|
||||||
if any(
|
if any(
|
||||||
syntax in view.settings().get("syntax") for syntax in as_json
|
syntax in view.settings().get("syntax") for syntax in as_json
|
||||||
):
|
):
|
||||||
PrettyJsonBaseCommand.clear_phantoms(self)
|
self.clear_phantoms()
|
||||||
json_content = view.substr(sublime.Region(0, view.size()))
|
json_content = view.substr(sublime.Region(0, view.size()))
|
||||||
try:
|
try:
|
||||||
self.json_loads(json_content)
|
self.json_loads(json_content)
|
||||||
|
|
Loading…
Reference in New Issue