Skip to content

Commit

Permalink
Merge pull request #1811 from timbrel/fixup-file-py
Browse files Browse the repository at this point in the history
  • Loading branch information
kaste authored Nov 19, 2023
2 parents 6e3b82e + 90f00a5 commit c7c795e
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 116 deletions.
116 changes: 8 additions & 108 deletions common/util/file.py
Original file line number Diff line number Diff line change
@@ -1,95 +1,13 @@
from collections import defaultdict
from contextlib import contextmanager
import os

import sublime

from GitSavvy.core.fns import maybe
from typing import Dict


MYPY = False
if MYPY:
from typing import DefaultDict, List, Optional

SUBLIME_HAS_SYNTAX_FUNCTIONS = int(sublime.version()) >= 4080


if 'syntax_file_map' not in globals():
syntax_file_map = defaultdict(list) # type: DefaultDict[str, List[str]]

if 'determine_syntax_thread' not in globals():
determine_syntax_thread = None


if SUBLIME_HAS_SYNTAX_FUNCTIONS:
def determine_syntax_files():
# type: () -> None
...

else:
import plistlib
import re
import threading
import yaml

def determine_syntax_files():
# type: () -> None
global determine_syntax_thread
if not syntax_file_map:
determine_syntax_thread = threading.Thread(
target=_determine_syntax_files)
determine_syntax_thread.start()

def _determine_syntax_files():
# type: () -> None
handle_tm_language_files()
handle_sublime_syntax_files()

def handle_tm_language_files():
# type: () -> None
syntax_files = sublime.find_resources("*.tmLanguage")
for syntax_file in syntax_files:
try:
resource = sublime.load_binary_resource(syntax_file)
except Exception:
print("GitSavvy: could not load {}".format(syntax_file))
continue

try:
extensions = plistlib.readPlistFromBytes(resource).get("fileTypes", [])
except Exception:
print("GitSavvy: could not parse {}".format(syntax_file))
continue

for extension in extensions:
syntax_file_map[extension].append(syntax_file)

def handle_sublime_syntax_files():
# type: () -> None
syntax_files = sublime.find_resources("*.sublime-syntax")
for syntax_file in syntax_files:
try:
resource = sublime.load_resource(syntax_file)
except Exception:
print("GitSavvy: could not load {}".format(syntax_file))
continue

for extension in try_parse_for_file_extensions(resource) or []:
syntax_file_map[extension].append(syntax_file)

def try_parse_for_file_extensions(text):
# type: (str) -> Optional[List[str]]
match = re.search(r"^file_extensions:\n((.*\n)+?)^(?=\w)", text, re.M)
if match:
return _try_yaml_parse(match.group(0))
return _try_yaml_parse(text)

def _try_yaml_parse(text):
# type: (str) -> Optional[List[str]]
try:
return yaml.safe_load(text)["file_extensions"]
except Exception:
return None
syntax_file_map = {} # type: Dict[str, str]


def guess_syntax_for_file(window, filename):
Expand All @@ -104,35 +22,17 @@ def guess_syntax_for_file(window, filename):

def remember_syntax_choice(filename, syntax):
# type: (str, str) -> None
registered_syntaxes = (
syntax_file_map.get(filename, [])
or syntax_file_map.get(get_file_extension(filename), [])
)
if syntax in registered_syntaxes:
registered_syntaxes.remove(syntax)
registered_syntaxes.append(syntax)
syntax_file_map[get_file_extension(filename) or filename] = syntax


def get_syntax_for_file(filename, default="Packages/Text/Plain text.tmLanguage"):
# type: (str, str) -> str
if not syntax_functions_readied():
return default
syntaxes = (
syntax_file_map.get(filename, [])
or syntax_file_map.get(get_file_extension(filename), [])
or maybe(lambda: [sublime.find_syntax_for_file(filename).path]) # type: ignore[union-attr]
or [default]
return (
syntax_file_map.get(filename)
or syntax_file_map.get(get_file_extension(filename))
or maybe(lambda: sublime.find_syntax_for_file(filename).path) # type: ignore[union-attr]
or default
)
return syntaxes[-1]


def syntax_functions_readied():
# type: () -> bool
if SUBLIME_HAS_SYNTAX_FUNCTIONS:
return True
if determine_syntax_thread and not determine_syntax_thread.is_alive():
return True
return False


def get_file_extension(filename):
Expand Down
7 changes: 0 additions & 7 deletions dependencies.json

This file was deleted.

1 change: 0 additions & 1 deletion git_savvy.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@ def prepare_gitsavvy():
from .common import util
from .core import runtime
runtime.determine_thread_names()
sublime.set_timeout_async(util.file.determine_syntax_files)

# Ensure all interfaces are ready.
sublime.set_timeout_async(
Expand Down

0 comments on commit c7c795e

Please sign in to comment.