Beispiel #1
0
    def run(self):
        default_file_name = "untitled.go"
        pkg_name = "main"
        view = gs.active_valid_go_view()
        try:
            basedir = gs.basedir_or_cwd(view and view.file_name())
            for fn in os.listdir(basedir):
                if fn.endswith(".go"):
                    name, _ = mg9.pkg_name(os.path.join(basedir, fn), "")
                    if name:
                        pkg_name = name
                        break
        except Exception:
            gs.error_traceback("GsNewGoFile")

        view = self.window.new_file()
        view.set_name(default_file_name)
        view.set_syntax_file("Packages/GoSublime/GoSublime.tmLanguage")
        edit = view.begin_edit()
        try:
            view.replace(edit, sublime.Region(0, view.size()), "package %s\n" % pkg_name)
            view.sel().clear()
            view.sel().add(view.find(pkg_name, 0, sublime.LITERAL))
        finally:
            view.end_edit(edit)
Beispiel #2
0
	def run(self):
		default_file_name = 'untitled.go'
		pkg_name = 'main'
		view = gs.active_valid_go_view()
		try:
			basedir = gs.basedir_or_cwd(view and view.file_name())
			for fn in os.listdir(basedir):
				if fn.endswith('.go'):
					name, _ = margo.package(os.path.join(basedir, fn), '')
					if name and name.get('Name'):
						pkg_name = name.get('Name')
						break
		except Exception:
			pass

		view = self.window.new_file()
		view.set_name(default_file_name)
		view.set_syntax_file('Packages/Go/Go.tmLanguage')
		edit = view.begin_edit()
		try:
			view.replace(edit, sublime.Region(0, view.size()), 'package %s\n' % pkg_name)
			view.sel().clear()
			view.sel().add(view.find(pkg_name, 0, sublime.LITERAL))
		finally:
			view.end_edit(edit)
Beispiel #3
0
 def on_change(self, s):
     if self.panel:
         size = self.view.size()
         if s.endswith("\t"):
             basedir = gs.basedir_or_cwd(self.view.file_name())
             lc = "go "
             hist = self.settings.get("cmd_hist")
             if gs.is_a(hist, {}):
                 hist = hist.get(basedir)
                 if hist and gs.is_a(hist, []):
                     lc = hist[-1]
             s = s.strip()
             if s and s not in ("", "go"):
                 l = []
                 for i in self.subcommands:
                     if i.startswith(s):
                         l.append(i)
                 if len(l) == 1:
                     s = "%s " % l[0]
             elif lc:
                 s = "%s " % lc
             edit = self.panel.begin_edit()
             try:
                 self.panel.replace(edit, sublime.Region(0, self.panel.size()), s)
             finally:
                 self.panel.end_edit(edit)
Beispiel #4
0
    def run(self):
        default_file_name = 'untitled.go'
        pkg_name = 'main'
        view = gs.active_valid_go_view()
        try:
            basedir = gs.basedir_or_cwd(view and view.file_name())
            for fn in os.listdir(basedir):
                if fn.endswith('.go'):
                    name, _ = margo.package(os.path.join(basedir, fn), '')
                    if name and name.get('Name'):
                        pkg_name = name.get('Name')
                        break
        except Exception:
            pass

        view = self.window.new_file()
        view.set_name(default_file_name)
        view.set_syntax_file('Packages/Go/Go.tmLanguage')
        edit = view.begin_edit()
        try:
            view.replace(edit, sublime.Region(0, view.size()),
                         'package %s\n' % pkg_name)
            view.sel().clear()
            view.sel().add(view.find(pkg_name, 0, sublime.LITERAL))
        finally:
            view.end_edit(edit)
Beispiel #5
0
 def on_change(self, s):
     if self.panel:
         size = self.view.size()
         if s.endswith('\t'):
             basedir = gs.basedir_or_cwd(self.view.file_name())
             lc = 'go '
             hist = self.settings.get('cmd_hist')
             if gs.is_a(hist, {}):
                 hist = hist.get(basedir)
                 if hist and gs.is_a(hist, []):
                     lc = hist[-1]
             s = s.strip()
             if s and s not in ('', 'go'):
                 l = []
                 for i in self.subcommands:
                     if i.startswith(s):
                         l.append(i)
                 if len(l) == 1:
                     s = '%s ' % l[0]
             elif lc:
                 s = '%s ' % lc
             edit = self.panel.begin_edit()
             try:
                 self.panel.replace(edit,
                                    sublime.Region(0, self.panel.size()), s)
             finally:
                 self.panel.end_edit(edit)
Beispiel #6
0
 def run(self, dir=''):
     if not dir:
         view = self.window.active_view()
         dir = gs.basedir_or_cwd(
             view.file_name() if view is not None else None)
     gsq.dispatch('*', lambda: show_pkgfiles(dir),
                  'scanning directory for package files')
Beispiel #7
0
	def on_change(self, s):
		if self.panel:
			size = self.view.size()
			if s.endswith('\t'):
				basedir = gs.basedir_or_cwd(self.view.file_name())
				lc = 'go '
				hist = self.settings.get('cmd_hist')
				if isinstance(hist, dict):
					hist = hist.get(basedir)
					if hist and isinstance(hist, list):
						lc = hist[-1]
				s = s.strip()
				if s and s not in ('', 'go'):
					l = []
					for i in self.subcommands:
						if i.startswith(s):
							l.append(i)
					if len(l) == 1:
						s = '%s ' % l[0]
				elif lc:
					s = '%s ' % lc
				edit = self.panel.begin_edit()
				try:
					self.panel.replace(edit, sublime.Region(0, self.panel.size()), s)
				finally:
					self.panel.end_edit(edit)
def cmd_9(view, edit, args, wd, rkey):
	if len(args) == 0 or args[0] not in ('play', 'build'):
		push_output(view, rkey, ('9: invalid args %s' % args))
		return

	subcmd = args[0]
	cid, cb = _9_begin_call(subcmd, view, edit, args, wd, rkey)
	a = {
		'cid': cid,
		'env': gs.env(),
		'dir': wd,
		'args': args[1:],
		'build_only': (subcmd == 'build'),
	}

	win = view.window()
	if win is not None:
		av = win.active_view()
		if av is not None:
			fn = av.file_name()
			if fn:
				basedir = gs.basedir_or_cwd(fn)
				for v in win.views():
					try:
						fn = v.file_name()
						if fn and v.is_dirty() and fn.endswith('.go') and os.path.dirname(fn) == basedir:
							v.run_command('gs_fmt_save')
					except Exception:
						gs.println(gs.traceback())
			else:
				if gs.is_go_source_view(av, False):
					a['src'] = av.substr(sublime.Region(0, av.size()))

	mg9.acall('play', a, cb)
Beispiel #9
0
    def run(self, edit):
        if gs.setting('comp_lint_enabled') is not True:
            return

        fn = self.view.file_name()
        fn = os.path.abspath(fn)
        if fn:
            dirname = gs.basedir_or_cwd(fn)
            file_refs[fn] = FileRef(self.view)
            gsq.dispatch(CL_DOMAIN, lambda: do_comp_lint(dirname, fn), '')
Beispiel #10
0
	def run(self, edit):
		if gs.setting('comp_lint_enabled') is not True:
			return

		fn = self.view.file_name()
		fn = os.path.abspath(fn)
		if fn:
			dirname = gs.basedir_or_cwd(fn)
			file_refs[fn] = FileRef(self.view)
			gsq.dispatch(CL_DOMAIN, lambda: do_comp_lint(dirname, fn), '')
Beispiel #11
0
	def __init__(self, cmd=[], shell=False, env={}, cwd=None, view=None):
		self.view = view
		super(ViewCommand, self).__init__(cmd=cmd, shell=shell, env=env, cwd=cwd)

		self.output_done = []

		if not self.cwd and view is not None:
			try:
				self.cwd = gs.basedir_or_cwd(view.file_name())
			except Exception:
				self.cwd = None
	def __init__(self, cmd=[], shell=False, env={}, cwd=None, view=None):
		self.view = view
		super(ViewCommand, self).__init__(cmd=cmd, shell=shell, env=env, cwd=cwd)

		self.output_done = []
		self.show_summary = False

		if not self.cwd and view is not None:
			try:
				self.cwd = gs.basedir_or_cwd(view.file_name())
			except Exception:
				self.cwd = None
Beispiel #13
0
def complete(fn, src, pos):
	home = gs.home_path()
	builtins = (gs.setting('autocomplete_builtins') is True or gs.setting('complete_builtins') is True)
	res, err = bcall('gocode_complete', {
		'Dir': gs.basedir_or_cwd(fn),
		'Builtins': builtins,
		'Fn':  fn or '',
		'Src': src or '',
		'Pos': pos or 0,
		'Home': home,
		'Env': gs.env({
			'XDG_CONFIG_HOME': home,
		}),
	})

	res = gs.dval(res.get('completions'), [])
	return res, err
Beispiel #14
0
def complete(fn, src, pos):
	home = gs.home_path()
	builtins = (gs.setting('autocomplete_builtins') is True or gs.setting('complete_builtins') is True)
	res, err = bcall('gocode_complete', {
		'Dir': gs.basedir_or_cwd(fn),
		'Builtins': builtins,
		'Fn':  fn or '',
		'Src': src or '',
		'Pos': pos or 0,
		'Home': home,
		'Env': gs.env({
			'XDG_CONFIG_HOME': home,
		}),
	})

	res = gs.dval(res.get('completions'), [])
	return res, err
Beispiel #15
0
def complete(fn, src, pos):
    home = gs.home_path()
    builtins = gs.setting("autocomplete_builtins") is True or gs.setting("complete_builtins") is True
    res, err = bcall(
        "gocode_complete",
        {
            "Dir": gs.basedir_or_cwd(fn),
            "Builtins": builtins,
            "Fn": fn or "",
            "Src": src or "",
            "Pos": pos or 0,
            "Home": home,
            "Env": gs.env({"XDG_CONFIG_HOME": home}),
        },
    )

    res = gs.dval(res.get("completions"), [])
    return res, err
def cmd_9(view, edit, args, wd, rkey):
    if len(args) == 0 or args[0] not in ('run', 'replay', 'build'):
        push_output(view, rkey, ('9: invalid args %s' % args))
        return

    subcmd = args[0]
    cid = ''
    if subcmd == 'replay':
        cid = '9replay-%s' % wd
    cid, cb = _9_begin_call(subcmd, view, edit, args, wd, rkey, cid)

    a = {
        'cid': cid,
        'env': gs.env(),
        'dir': wd,
        'args': args[1:],
        'build_only': (subcmd == 'build'),
    }

    win = view.window()
    if win is not None:
        av = win.active_view()
        if av is not None:
            fn = av.file_name()
            if fn:
                basedir = gs.basedir_or_cwd(fn)
                for v in win.views():
                    try:
                        fn = v.file_name()
                        if fn and v.is_dirty() and fn.endswith(
                                '.go') and os.path.dirname(fn) == basedir:
                            v.run_command('gs_fmt_save')
                    except Exception:
                        gs.println(gs.traceback())
            else:
                if gs.is_go_source_view(av, False):
                    a['src'] = av.substr(sublime.Region(0, av.size()))

    mg9.acall('play', a, cb)
Beispiel #17
0
		def cb(s):
			file_name = self.view.file_name() or ''
			s = GO_PLAY_PAT.sub(r'\1go run\2', s)
			s = s.strip()
			if s and self.change_history:
				hist = self.settings.get('cmd_hist')
				if not isinstance(hist, dict):
					hist = {}
				basedir = gs.basedir_or_cwd(file_name)
				hist[basedir] = [s] # todo: store a list of historical commands
				self.settings.set('cmd_hist', hist)
				sublime.save_settings('GoSublime-GsShell.sublime-settings')

			if GO_SHARE_PAT.match(s):
				s = ''
				host = "play.golang.org"
				warning = 'Are you sure you want to share this file. It will be public on %s' % host
				if not sublime.ok_cancel_dialog(warning):
					return

				try:
					c = httplib.HTTPConnection(host)
					src = self.view.substr(sublime.Region(0, self.view.size()))
					c.request('POST', '/share', src, {'User-Agent': 'GoSublime'})
					s = 'http://%s/p/%s' % (host, c.getresponse().read())
				except Exception as ex:
					s = 'Error: %s' % ex

				self.show_output(s)
				return

			if GO_RUN_PAT.match(s):
				if not file_name:
					# todo: clean this up after the command runs
					f, err = gs.temp_file(suffix='.go', prefix=DOMAIN+'-play.', delete=False)
					if err:
						self.show_output(err)
						return
					else:
						try:
							src = self.view.substr(sublime.Region(0, self.view.size()))
							if isinstance(src, unicode):
								src = src.encode('utf-8')
							f.write(src)
							f.close()
						except Exception as ex:
							self.show_output('Error: %s' % ex)
							return
						file_name = f.name
				s = 'go run "%s"' % file_name
			else:
				gpat = ' *.go'
				if gpat in s:
					fns = []
					for fn in os.listdir(os.path.dirname(self.view.file_name())):
						if fn.endswith('.go') and fn[0] not in ('.', '_') and not fn.endswith('_test.go'):
							fns.append('"%s"' % fn)
					fns = ' '.join(fns)
					if fns:
						s = s.replace(gpat, ' '+fns)
			self.view.window().run_command("exec", { 'kill': True })
			self.view.window().run_command("exec", {
				'shell': True,
				'env': gs.env(),
				'cmd': [s],
				'file_regex': '^(.+\.go):([0-9]+):(?:([0-9]+):)?\s*(.*)',
			})
Beispiel #18
0
        def cb(s):
            file_name = self.view.file_name() or ""
            s = GO_PLAY_PAT.sub(r"\1go run\2", s)
            s = s.strip()
            if s and s.lower() != "go" and self.change_history:
                hist = self.settings.get("cmd_hist")
                if not gs.is_a(hist, {}):
                    hist = {}
                basedir = gs.basedir_or_cwd(file_name)
                hist[basedir] = [s]  # todo: store a list of historical commands
                hst = {}
                for k in hist:
                    # :|
                    hst[gs.ustr(k)] = gs.ustr(hist[k])
                self.settings.set("cmd_hist", hst)
                sublime.save_settings("GoSublime-GsShell.sublime-settings")

            if GO_SHARE_PAT.match(s):
                s = ""
                host = "play.golang.org"
                warning = "Are you sure you want to share this file. It will be public on %s" % host
                if not sublime.ok_cancel_dialog(warning):
                    return

                try:
                    c = httplib.HTTPConnection(host)
                    src = gs.astr(self.view.substr(sublime.Region(0, self.view.size())))
                    c.request("POST", "/share", src, {"User-Agent": "GoSublime"})
                    s = "http://%s/p/%s" % (host, c.getresponse().read())
                except Exception as ex:
                    s = "Error: %s" % ex

                self.show_output(s, focus=True)
                return

            if GO_RUN_PAT.match(s):
                if not file_name:
                    # todo: clean this up after the command runs
                    err = ""
                    tdir, _ = gs.temp_dir("play")
                    file_name = hashlib.sha1(gs.view_fn(self.view) or "a").hexdigest()
                    file_name = os.path.join(tdir, ("%s.go" % file_name))
                    try:
                        with open(file_name, "w") as f:
                            src = gs.astr(self.view.substr(sublime.Region(0, self.view.size())))
                            f.write(src)
                    except Exception as ex:
                        err = str(ex)

                    if err:
                        self.show_output("Error: %s" % err)
                        return

                s = ["go", "run", file_name]

            self.view.window().run_command("exec", {"kill": True})
            if gs.is_a(s, []):
                use_shell = False
            else:
                use_shell = True
                s = [s]
            gs.println("running %s" % " ".join(s))
            self.view.window().run_command(
                "exec",
                {
                    "shell": use_shell,
                    "env": gs.env(),
                    "cmd": s,
                    "file_regex": "^(.+\.go):([0-9]+):(?:([0-9]+):)?\s*(.*)",
                },
            )
Beispiel #19
0
 def cb(i, win):
     if i >= 0:
         dirname = gs.basedir_or_cwd(m[ents[i]])
         win.run_command("gs_browse_files", {"dir": dirname})
Beispiel #20
0
		def cb(s):
			file_name = self.view.file_name() or ''
			s = GO_PLAY_PAT.sub(r'\1go run\2', s)
			s = s.strip()
			if s and s.lower() != "go" and self.change_history:
				hist = self.settings.get('cmd_hist')
				if not gs.is_a(hist, {}):
					hist = {}
				basedir = gs.basedir_or_cwd(file_name)
				hist[basedir] = [s] # todo: store a list of historical commands
				hst = {}
				for k in hist:
					# :|
					hst[gs.ustr(k)] = gs.ustr(hist[k])
				self.settings.set('cmd_hist', hst)
				sublime.save_settings('GoSublime-GsShell.sublime-settings')

			if GO_SHARE_PAT.match(s):
				s = ''
				host = "play.golang.org"
				warning = 'Are you sure you want to share this file. It will be public on %s' % host
				if not sublime.ok_cancel_dialog(warning):
					return

				try:
					c = httplib.HTTPConnection(host)
					src = gs.astr(self.view.substr(sublime.Region(0, self.view.size())))
					c.request('POST', '/share', src, {'User-Agent': 'GoSublime'})
					s = 'http://%s/p/%s' % (host, c.getresponse().read())
				except Exception as ex:
					s = 'Error: %s' % ex

				self.show_output(s, focus=True)
				return

			if GO_RUN_PAT.match(s):
				if not file_name:
					# todo: clean this up after the command runs
					err = ''
					tdir, _ = gs.temp_dir('play')
					file_name = hashlib.sha1(gs.view_fn(self.view) or 'a').hexdigest()
					file_name = os.path.join(tdir, ('%s.go' % file_name))
					try:
						with open(file_name, 'w') as f:
							src = gs.astr(self.view.substr(sublime.Region(0, self.view.size())))
							f.write(src)
					except Exception as ex:
						err = str(ex)

					if err:
						self.show_output('Error: %s' % err)
						return

				s = ['go', 'run', file_name]

			self.view.window().run_command("exec", { 'kill': True })
			if gs.is_a(s, []):
				use_shell = False
			else:
				use_shell = True
				s = [s]
			gs.println('running %s' % ' '.join(s))
			self.view.window().run_command("exec", {
				'shell': use_shell,
				'env': gs.env(),
				'cmd': s,
				'file_regex': '^(.+\.go):([0-9]+):(?:([0-9]+):)?\s*(.*)',
			})
Beispiel #21
0
        def cb(s):
            file_name = self.view.file_name() or ''
            s = GO_PLAY_PAT.sub(r'\1go run\2', s)
            s = s.strip()
            if s and s.lower() != "go" and self.change_history:
                hist = self.settings.get('cmd_hist')
                if not gs.is_a(hist, {}):
                    hist = {}
                basedir = gs.basedir_or_cwd(file_name)
                hist[basedir] = [s
                                 ]  # todo: store a list of historical commands
                hst = {}
                for k in hist:
                    # :|
                    hst[gs.ustr(k)] = gs.ustr(hist[k])
                self.settings.set('cmd_hist', hst)
                sublime.save_settings('GoSublime-GsShell.sublime-settings')

            if GO_SHARE_PAT.match(s):
                s = ''
                host = "play.golang.org"
                warning = 'Are you sure you want to share this file. It will be public on %s' % host
                if not sublime.ok_cancel_dialog(warning):
                    return

                try:
                    c = httplib.HTTPConnection(host)
                    src = gs.astr(
                        self.view.substr(sublime.Region(0, self.view.size())))
                    c.request('POST', '/share', src,
                              {'User-Agent': 'GoSublime'})
                    s = 'http://%s/p/%s' % (host, c.getresponse().read())
                except Exception as ex:
                    s = 'Error: %s' % ex

                self.show_output(s, focus=True)
                return

            if GO_RUN_PAT.match(s):
                if not file_name:
                    # todo: clean this up after the command runs
                    err = ''
                    tdir, _ = gs.temp_dir('play')
                    file_name = hashlib.sha1(gs.view_fn(self.view)
                                             or 'a').hexdigest()
                    file_name = os.path.join(tdir, ('%s.go' % file_name))
                    try:
                        with open(file_name, 'w') as f:
                            src = gs.astr(
                                self.view.substr(
                                    sublime.Region(0, self.view.size())))
                            f.write(src)
                    except Exception as ex:
                        err = str(ex)

                    if err:
                        self.show_output('Error: %s' % err)
                        return

                s = ['go', 'run', file_name]

            self.view.window().run_command("exec", {'kill': True})
            if gs.is_a(s, []):
                use_shell = False
            else:
                use_shell = True
                s = [s]
            gs.println('running %s' % ' '.join(s))
            self.view.window().run_command(
                "exec", {
                    'shell': use_shell,
                    'env': gs.env(),
                    'cmd': s,
                    'file_regex': '^(.+\.go):([0-9]+):(?:([0-9]+):)?\s*(.*)',
                })
Beispiel #22
0
def active_wd(win=None):
	_, v = gs.win_view(win=win)
	return gs.basedir_or_cwd(v.file_name() if v else '')
				def cb(i, win):
					if i >= 0:
						dirname = gs.basedir_or_cwd(m[ents[i]])
						win.run_command('gs_browse_files', {'dir': dirname})
Beispiel #24
0
def active_wd(win=None):
    _, v = gs.win_view(win=win)
    return gs.basedir_or_cwd(v.file_name() if v else '')
Beispiel #25
0
	def run(self, dir=''):
		if not dir:
			view = self.window.active_view()
			dir = gs.basedir_or_cwd(view.file_name() if view is not None else None)
		gsq.dispatch('*', lambda: show_pkgfiles(dir), 'scanning directory for package files')