ostinelli / SublimErl

An Erlang Plugin for Sublime Text 2, which enables code completion and allows you to run tests within the editor itself.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Saving a file in a big project locks up Sublime

bjnortier opened this issue · comments

I have a fairly big project and every time I save a file, Sublime locks up for about 5 seconds. I have traced it to

sublime.set_timeout(completions.compile_source, 0)

in sublimerl_completion.py:

def on_post_save(self, view):
    ...
    class SublimErlThread(threading.Thread):
        def run(self):
            # compile
            sublime.set_timeout(completions.compile_source, 0) # 
            # trigger event to reload completions
            sublime.set_timeout(completions.generate_project_completions, 0)
    SublimErlThread().start()

https://github.com/ostinelli/SublimErl/blob/master/sublimerl_completion.py#L212

I believe it's because it takes about 5 seconds for rebar to compile the whole project. Interestingly, if I remove the sublime.set_timeout and just call

completions.compile_source()

then it's fine as it's not in the Sublime GUI thread, but I presume that's not thread-safe and set_timeout is used for a reason.

Using skip_deps=true when compiling would help, but it will still lock up the UI for a second or two.

If it could be kept in the separate thread and 'skip_deps=true' it would be great. I can create a pull request.

What is the reason for using set_timeout?

Hi Benjamin,

thank you for this feedback. I had to use set_timeout previously because some sublime methods are only available from the main thread, but I've done a major code refactoring that should have got rid of those.

So please go ahead and create the pull request.

Hi @bjnortier,

should I go ahead with this or wait for your pull request? :)

Created. I only changed the set_timeout calls in on_post_save, not the others as I was unsure about them

Thank you. Will review and merge asap.