Created
February 17, 2012 17:48
-
-
Save rorydriscoll/1854585 to your computer and use it in GitHub Desktop.
Sublime Text 2 plugin to parse lua on the fly
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import sublime | |
import sublime_plugin | |
import re | |
from subprocess import Popen, PIPE | |
class ExampleCommand(sublime_plugin.EventListener): | |
TIMEOUT_MS = 200 | |
def __init__(self): | |
self.pending = 0 | |
def on_modified(self, view): | |
filename = view.file_name() | |
if not filename or not filename.endswith('.lua'): | |
return | |
self.pending = self.pending + 1 | |
sublime.set_timeout(lambda: self.parse(view), self.TIMEOUT_MS) | |
def parse(self, view): | |
# Don't bother parsing if there's another parse command pending | |
self.pending = self.pending - 1 | |
if self.pending > 0: | |
return | |
# Run luac with the parse option | |
p = Popen('luac -p -', stdin=PIPE, stderr=PIPE, shell=True) | |
text = view.substr(sublime.Region(0, view.size())) | |
errors = p.communicate(text)[1] | |
result = p.wait() | |
# Clear out any old region markers | |
view.erase_regions('lua') | |
# Nothing to do if it parsed successfully | |
if result == 0: | |
return | |
# Add regions and place the error message in the status bar | |
sublime.status_message(errors) | |
pattern = re.compile(r':([0-9]+):') | |
regions = [view.full_line(view.text_point(int(match) - 1, 0)) for match in pattern.findall(errors)] | |
view.add_regions('lua', regions, 'invalid', 'DOT', sublime.HIDDEN) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment