Esempio n. 1
0
	def run(self):
		while True:
			fn = self.popq()
			fr = ref(fn, False)
			if fr:
				reports = {}
				res, _ = mg9.bcall('lint', {
					'dir': (os.path.dirname(fn) if fn else ''),
					'fn': fn,
					'src': fr.src,
					'filter': gs.setting('lint_filter', []),
				})
				res = gs.dval(res, {})
				for r in gs.dval(res.get('reports'), []):
					if fn and fn != '<stdin>' and r.get('Fn') != fn:
						continue

					kind = r.get('Kind', '')
					row = r.get('Row', 0)
					col = r.get('Col', 0)
					msg = r.get('Message', '')
					msg = '%s: %s' % (kind, msg)
					if row >= 0 and msg:
						reports[row] = Report(row, col, msg)

				fr = ref(fn, False)
				if fr:
					with sem:
						fr.state = 1
						fr.reports = reports
						file_refs[fn] = fr
Esempio n. 2
0
    def run(self):
        while True:
            fn = self.popq()
            fr = ref(fn, False)
            if fr:
                reports = {}
                res, _ = mg9.bcall('lint', {'fn': fn, 'src': fr.src})
                res = gs.dval(res, {})
                for r in gs.dval(res.get('reports'), []):
                    row = r.get('row', 0)
                    col = r.get('col', 0)
                    msg = r.get('message', '')
                    if row >= 0 and msg:
                        reports[row] = Report(row, col, msg)

                fr = ref(fn, False)
                if fr:
                    with sem:
                        fr.state = 1
                        fr.reports = reports
                        file_refs[fn] = fr
Esempio n. 3
0
	def run(self):
		while True:
			fn = self.popq()
			fr = ref(fn, False)
			if fr:
				reports = {}
				res, _ = mg9.bcall('lint', {'fn': fn, 'src': fr.src, 'filter': gs.setting('lint_filter', [])})
				res = gs.dval(res, {})
				for r in gs.dval(res.get('reports'), []):
					row = r.get('Row', 0)
					col = r.get('Col', 0)
					msg = r.get('Message', '')
					if row >= 0 and msg:
						reports[row] = Report(row, col, msg)

				fr = ref(fn, False)
				if fr:
					with sem:
						fr.state = 1
						fr.reports = reports
						file_refs[fn] = fr
Esempio n. 4
0
            def f2(cl, err):
                c = {}
                if len(cl) == 1:
                    c = cl[0]

                if set_status:
                    intel, _ = mg9.bcall('intel', {
                        'Fn': fn,
                        'Src': src,
                        'Pos': pos,
                    })

                    s = ''
                    if c:
                        pfx = 'func('
                        typ = c['type']
                        if typ.startswith(pfx):
                            s = 'func %s(%s' % (c['name'], typ[len(pfx):])
                        else:
                            s = '%s: %s' % (c['name'], typ)

                    func = intel.get('Func')
                    if func:
                        s = u'%s \u00B7 %s > %s' % (s, intel.get('Pkg'), func)

                    if s:
                        view.set_status(HINT_KEY, s)
                    else:
                        view.erase_status(HINT_KEY)
                else:
                    if c:
                        s = '%s %s\n%s' % (c['name'], c['class'], c['type'])
                    else:
                        s = '// %s' % (err or 'No calltips found')

                    gs.show_output(HINT_KEY,
                                   s,
                                   print_output=False,
                                   syntax_file='GsDoc')
Esempio n. 5
0
			def f2(cl, err):
				c = {}
				if len(cl) == 1:
					c = cl[0]

				if set_status:
					intel, _ = mg9.bcall('intel', {
						'Fn': fn,
						'Src': src,
						'Pos': pos,
					})

					s = ''
					if c:
						pfx = 'func('
						typ = c['type']
						if typ.startswith(pfx):
							s = 'func %s(%s' % (c['name'], typ[len(pfx):])
						else:
							s = '%s: %s' % (c['name'], typ)

					func = intel.get('Func')
					if func:
						s = u'%s \u00B7 %s > %s' % (s, intel.get('Pkg'), func)

					if s:
						view.set_status(HINT_KEY, s)
					else:
						view.erase_status(HINT_KEY)
				else:
					if c:
						s = '%s %s\n%s' % (c['name'], c['class'], c['type'])
					else:
						s = '// %s' % (err or 'No calltips found')

					gs.show_output(HINT_KEY, s, print_output=False, syntax_file='GsDoc')
Esempio n. 6
0
	def on_query_completions(self, view, prefix, locations):
		pos = locations[0]
		scopes = view.scope_name(pos).split()
		self.not_in_scope = ('source.go' not in scopes) or (gs.setting('gscomplete_enabled', False) is not True)
		if self.not_in_scope:
			return []

		if view.score_selector(pos, 'comment.build-constraint.go') > 0:
			return (BUILD_CL, AC_OPTS)

		if not scope_ok(view, pos):
			return ([], AC_OPTS)

		try:
			if basename(view.file_name()) == "main.go":
				default_pkgname = 'main'
			else:
				default_pkgname = basename(dirname(view.file_name()))
		except Exception:
			default_pkgname = ''

		if not REASONABLE_PKGNAME_PAT.match(default_pkgname):
			default_pkgname = ''

		offset = pos - len(prefix)
		vv = vu.V(view)
		src = vv.src()

		if not src:
			return ([], AC_OPTS)

		intel, _ = mg9.bcall('intel', {
			'Fn': vv.vfn(),
			'Src': src,
			'Pos': pos,
		})

		pkgname = intel.get('Pkg')
		if not default_pkgname:
			default_pkgname = pkgname if pkgname else 'main'

		types = intel.get('Types')  or []
		ctx = {
			'global': intel.get('Global'),
			'local': not intel.get('Global'),
			'pkgname': pkgname,
			'types': types or [''],
			'has_types': len(types) > 0,
			'default_pkgname': default_pkgname,
			'fn': vv.fn(),
		}

		if not pkgname:
			return (resolve_snippets(ctx), AC_OPTS) if cfg.autocomplete_snippets else ([], AC_OPTS)

		iface_name = view.substr(view.line(sublime.Region(pos -1 , pos)))[:-1]
		if iface_name.rfind('.') != -1:
			iface_name = iface_name[iface_name.rfind('.') + 1:]

		if iface_name != GoSublime.current_interface['name']:
			GoSublime.current_interface = {'name': iface_name, 'funcs': []}

		nc = view.substr(sublime.Region(pos, pos+1))
		cl = self.complete(vv.fn() or '<stdin>', offset, src, nc.isalpha() or nc == "(")

		pc = view.substr(sublime.Region(pos-1, pos))
		if cfg.autocomplete_snippets and (pc.isspace() or pc.isalpha()):
			if scopes[-1] == 'source.go':
				cl.extend(resolve_snippets(ctx))
			elif scopes[-1] == 'meta.block.go' and ('meta.function.plain.go' in scopes or 'meta.function.receiver.go' in scopes):
				cl.extend(resolve_snippets(ctx))
		return (cl, AC_OPTS)
Esempio n. 7
0
    def on_query_completions(self, view, prefix, locations):
        pos = locations[0]
        scopes = view.scope_name(pos).split()
        if ('source.go' not in scopes) or (gs.setting('gscomplete_enabled',
                                                      False) is not True):
            return []

        if view.score_selector(pos, 'comment.build-constraint.go') > 0:
            return (BUILD_CL, AC_OPTS)

        if not scope_ok(view, pos):
            return ([], AC_OPTS)

        try:
            if basename(view.file_name()) == "main.go":
                default_pkgname = 'main'
            else:
                default_pkgname = basename(dirname(view.file_name()))
        except Exception:
            default_pkgname = ''

        if not REASONABLE_PKGNAME_PAT.match(default_pkgname):
            default_pkgname = ''

        offset = pos - len(prefix)
        vv = vu.V(view)
        src = vv.src()

        if not src:
            return ([], AC_OPTS)

        intel, _ = mg9.bcall('intel', {
            'Fn': vv.vfn(),
            'Src': src,
            'Pos': pos,
        })

        pkgname = intel.get('Pkg')
        if not default_pkgname:
            default_pkgname = pkgname if pkgname else 'main'

        types = intel.get('Types') or []
        ctx = {
            'global': intel.get('Global'),
            'local': not intel.get('Global'),
            'pkgname': pkgname,
            'types': types or [''],
            'has_types': len(types) > 0,
            'default_pkgname': default_pkgname,
            'fn': vv.fn(),
        }

        if not pkgname:
            return (resolve_snippets(ctx),
                    AC_OPTS) if cfg.autocomplete_snippets else ([], AC_OPTS)

        nc = view.substr(sublime.Region(pos, pos + 1))
        cl = self.complete(vv.fn() or '<stdin>', offset, src,
                           nc.isalpha() or nc == "(")

        pc = view.substr(sublime.Region(pos - 1, pos))
        if cfg.autocomplete_snippets and (pc.isspace() or pc.isalpha()):
            if scopes[-1] == 'source.go':
                cl.extend(resolve_snippets(ctx))
            elif scopes[-1] == 'meta.block.go' and (
                    'meta.function.plain.go' in scopes
                    or 'meta.function.receiver.go' in scopes):
                cl.extend(resolve_snippets(ctx))
        return (cl, AC_OPTS)