def run(self): poly_inst = poly.global_instance(self.poly_bin) view = self.window.active_view() polyio.show_output_view() path = self.window.active_view().file_name() if poly_inst.has_built(path): position = view.sel()[0].begin() try: node = poly_inst.node_for_position(path, position) name = view.substr(sublime.Region(node.start, node.end)) ml_type = poly_inst.type_for_node(node) if ml_type != None: polyio.println('val %s : %s' % (name, ml_type)) else: polyio.println("Can't decribe %s" % name) except poly.process.Timeout: pass polyio.println() else: polyio.println('Recompile this file to get info about its symbols.')
def run(self): view = self.window.active_view() poly_bin = view.settings().get("poly_bin") if poly_bin == None: poly_bin = "/usr/local/bin/poly" if self.poly == None or self.poly.poly_bin != poly_bin: self.poly = poly.global_instance(poly_bin) if self.current_job != None: print("Compile job already in progress...") return view.erase_regions("poly-errors") output_view = polyio.output_view() polyio.clear_output_view() polyio.show_output_view() polyio.println("Compiling code with Poly/ML...") preamble = "" path = self.window.active_view().file_name() if path != None: working_dir = os.path.dirname(path) file_name = os.path.basename(path) output_view.settings().set("result_base_dir", working_dir) preamble = 'OS.FileSys.chDir "' + working_dir + '";\n' polysave = working_dir + "/.polysave/" + file_name + ".save" if os.path.exists(polysave): preamble += 'PolyML.SaveState.loadState("' + polysave + '");\n' preamble += "PolyML.fullGC ();\n" else: path = "--scratch--" file_name = "--scratch--" output_view.settings().set("result_file_regex", "^(.*?):([0-9]*):.([0-9]*)-[0-9]*.:[ ](.*)$") ml = view.substr(sublime.Region(0, len(view))) spinner = None def handler(code, messages): if spinner != None: polyio.stop_spinner(spinner) self.current_job = None def h(): if code == "S": polyio.println("[Success]") else: polyio.println("[{0}]\n".format(poly.translate_result_code(code))) error_regions = [] for msg in messages: line, start_col = view.rowcol(msg.location.start) line += 1 # counting lines from 1 end_col = view.rowcol(msg.location.end)[1] error_regions.append(sublime.Region(msg.location.start, msg.location.end)) polyio.println( "{0}:{1}:({2}-{3}): {4}".format( os.path.basename(msg.location.file_name), line, start_col + 1, end_col + 1, msg.text ) ) view.add_regions("poly-errors", error_regions, "constant", sublime.DRAW_OUTLINED) sublime.set_timeout(h, 0) # execute h() on the main thread try: self.current_job = self.poly.compile(path, preamble, ml, handler) except poly.process.ProtocolError as e: polyio.println("Protocol Error: " + str(e)) polyio.println("Check that 'poly_bin' is defined correctly in your user settings.") else: spinner = polyio.start_spinner("Compiling '{0}'".format(file_name))
def __init__(self, window): sublime_plugin.WindowCommand.__init__(self, window) self.poly = poly.global_instance(window.active_view().settings().get('poly_bin'))