예제 #1
0
    def run(self, edit, **kw):
        if not can_run():
            return
        view = active_view()

        proj = project.project_for_view(view) or {}
        with ctx.js() as c:
            refs = c.locals.ternFindRefs(view, proj.get("id", "empty"))

            # do rename for local references only
            regions = []
            file_name = file_name_from_view(view)
            caret_pos = view.sel()[0].begin()
            ctx_region = None

            for r in refs["refs"]:
                if file_name == r["file"]:
                    rg = sublime.Region(r["start"], r["end"])
                    if rg.contains(caret_pos):
                        ctx_region = len(regions)
                    regions.append(rg)

            if regions:
                sel = view.sel()
                sel.clear()
                for r in regions:
                    sel.add(r)
                view.add_regions(rename_region_key, regions, "string", flags=sublime.HIDDEN)

                # create rename session
                globals()["_rename_session"] = {
                    "old_name": view.substr(view.sel()[0]),
                    "ctx_region": ctx_region,
                    "caret_pos": caret_pos,
                }
예제 #2
0
    def run(self, edit, **kw):
        if not can_run(): return
        view = active_view()

        proj = project.project_for_view(view) or {}
        dfn = ctx.js().locals.ternJumpToDefinition(view,
                                                   proj.get('id', 'empty'))
        if dfn:
            target_file = dfn['file']

            # resolve target file
            if not os.path.isabs(target_file) and proj.get('id',
                                                           'empty') != 'empty':
                target_file = os.path.join(os.path.dirname(proj['id']),
                                           target_file)
                dfn['file'] = target_file

            if target_file != file_name_from_view(view):
                target_view = view.window().open_file(target_file)

                if not target_view.is_loading():
                    apply_jump_def(target_view, dfn)
                else:
                    globals()['_jump_def'] = dfn
                    return
            else:
                apply_jump_def(view, dfn)
예제 #3
0
    def run(self, edit, **kw):
        if not can_run():
            return
        view = active_view()

        proj = project.project_for_view(view) or {}
        with ctx.js() as c:
            dfn = c.locals.ternJumpToDefinition(view, proj.get("id", "empty"))
            if dfn:
                target_file = dfn["file"]

                # resolve target file
                if not os.path.isabs(target_file) and proj.get("id", "empty") != "empty":
                    target_file = os.path.join(proj["dir"], target_file)
                    dfn["file"] = target_file

                if target_file != file_name_from_view(view):
                    target_view = view.window().open_file(target_file)

                    if not target_view.is_loading():
                        apply_jump_def(target_view, dfn)
                    else:
                        globals()["_jump_def"] = dfn
                        return
                else:
                    apply_jump_def(view, dfn)
예제 #4
0
	def run(self, edit, **kw):
		if not can_run(): return
		view = active_view()

		proj = project.project_for_view(view) or {}
		refs = ctx.js().locals.ternFindRefs(view, proj.get('id', 'empty'))
		
		# do rename for local references only
		regions = []
		file_name = file_name_from_view(view)
		caret_pos = view.sel()[0].begin()
		ctx_region = None

		for r in refs['refs']:
			if file_name == r['file']:
				rg = sublime.Region(r['start'], r['end'])
				if rg.contains(caret_pos):
					ctx_region = len(regions)
				regions.append(rg)

		if regions:
			sel = view.sel()
			sel.clear()
			for r in regions:
				sel.add(r)
			view.add_regions(rename_region_key, regions, 'string', flags=sublime.HIDDEN)

			# create rename session
			globals()['_rename_session'] = {
				'old_name': view.substr(view.sel()[0]),
				'ctx_region': ctx_region,
				'caret_pos': caret_pos
			}
예제 #5
0
	def on_post_save(self, view):
		file_name = view.file_name()
		if file_name and file_name.endswith('.sublime-project'):
			# Project file was updated, re-scan all projects
			return reload_ternjs()

		if is_js_view(view):
			p = project.project_for_view(view)
			if p:
				sublime.set_timeout(lambda: ctx.js().locals.forceFileUpdate(view, p['id']), 1)
			return
예제 #6
0
    def on_post_save(self, view):
        file_name = view.file_name()
        if file_name and file_name.endswith('.sublime-project'):
            # Project file was updated, re-scan all projects
            return reload_ternjs()

        if is_js_view(view):
            p = project.project_for_view(view)
            if p:
                sublime.set_timeout(
                    lambda: ctx.js().locals.forceFileUpdate(view, p['id']), 1)
            return
예제 #7
0
    def on_query_completions(self, view, prefix, locations):
        if not can_run() or not completions_allowed(view) or view.get_regions(
                rename_region_key):
            return None

        proj = project.project_for_view(view) or {}
        completions = ctx.js().locals.ternHints(view, proj.get('id', 'empty'))
        if completions and hasattr(completions, 'list'):
            cmpl = [completion_item(c) for c in completions['list']]
            # print(cmpl)
            return cmpl

        return None
예제 #8
0
	def on_query_completions(self, view, prefix, locations):
		if not can_run() or not completions_allowed(view) or view.get_regions(rename_region_key):
			return None

		proj = project.project_for_view(view) or {}
		completions = ctx.js().locals.ternHints(view, proj.get('id', 'empty'))
		if completions and hasattr(completions, 'list'):
			cmpl = [completion_item(c) for c in completions['list']]
			# print(cmpl)
			return cmpl


		return None
예제 #9
0
    def on_query_completions(self, view, prefix, locations):
        if not completions_allowed(view) or view.get_regions(rename_region_key) or not can_run():
            return None

        proj = project.project_for_view(view) or {}
        with ctx.js() as c:
            completions = c.locals.ternHints(view, proj.get("id", "empty"))
            if completions and hasattr(completions, "list"):
                cmpl = [completion_item(_c) for _c in completions["list"]]
                # print(cmpl)
                return cmpl

        return None
예제 #10
0
    def on_post_save(self, view):
        file_name = view.file_name()
        if file_name and file_name.endswith(".sublime-project"):
            # Project file was updated, re-scan all projects
            return reload_ternjs()

        if is_js_view(view):
            p = project.project_for_view(view)
            if p:

                def _callback():
                    with ctx.js() as c:
                        c.locals.forceFileUpdate(view, p["id"])

                sublime.set_timeout(_callback, 1)
            return
예제 #11
0
	def get_regions(self, direction='next'):
		if not can_run(): return
		view = active_view()

		proj = project.project_for_view(view) or {}
		refs = ctx.js().locals.ternFindRefs(view, proj.get('id', 'empty'))

		# use local references only
		regions = []
		file_name = file_name_from_view(view)

		for r in refs['refs']:
			if file_name == r['file']:
				regions.append(sublime.Region(r['start'], r['end']))

		return regions
예제 #12
0
    def get_regions(self, direction='next'):
        if not can_run(): return
        view = active_view()

        proj = project.project_for_view(view) or {}
        refs = ctx.js().locals.ternFindRefs(view, proj.get('id', 'empty'))

        # use local references only
        regions = []
        file_name = file_name_from_view(view)

        for r in refs['refs']:
            if file_name == r['file']:
                regions.append(sublime.Region(r['start'], r['end']))

        return regions
예제 #13
0
def completions_allowed(view):
    "Check if TernJS completions allowed for given view"
    caret_pos = view.sel()[0].begin()
    if not is_js_view(view) or not view.score_selector(caret_pos, "-string -comment"):
        return False

    proj = project.project_for_view(view)
    if proj and "disable_completions" in proj["config"]:
        patterns = proj["config"]["disable_completions"]
        if not isinstance(patterns, list):
            patterns = [patterns]

        for p in patterns:
            if fnmatch.fnmatch(view.file_name(), p):
                return False

    return True
예제 #14
0
    def get_regions(self, direction="next"):
        if not can_run():
            return
        view = active_view()

        proj = project.project_for_view(view) or {}
        with ctx.js() as c:
            refs = c.locals.ternFindRefs(view, proj.get("id", "empty"))

            # use local references only
            regions = []
            file_name = file_name_from_view(view)

            for r in refs["refs"]:
                if file_name == r["file"]:
                    regions.append(sublime.Region(r["start"], r["end"]))

            return regions
예제 #15
0
def completions_allowed(view):
    "Check if TernJS completions allowed for given view"
    caret_pos = view.sel()[0].begin()
    if not is_js_view(view) or not view.score_selector(caret_pos,
                                                       '-string -comment'):
        return False

    proj = project.project_for_view(view)
    if proj and 'disable_completions' in proj['config']:
        patterns = proj['config']['disable_completions']
        if not isinstance(patterns, list):
            patterns = [patterns]

        for p in patterns:
            if fnmatch.fnmatch(view.file_name(), p):
                return False

    return True
예제 #16
0
    def run(self, edit, **kw):
        if not can_run(): return
        view = active_view()

        proj = project.project_for_view(view) or {}
        with ctx.js() as c:
            refs = c.locals.ternFindRefs(view, proj.get('id', 'empty'))

            # do rename for local references only
            regions = []
            file_name = file_name_from_view(view)
            caret_pos = view.sel()[0].begin()
            ctx_region = None

            for r in refs['refs']:
                if file_name == r['file']:
                    rg = sublime.Region(r['start'], r['end'])
                    if rg.contains(caret_pos):
                        ctx_region = len(regions)
                    regions.append(rg)

            if regions:
                sel = view.sel()
                sel.clear()
                for r in regions:
                    sel.add(r)
                view.add_regions(rename_region_key,
                                 regions,
                                 'string',
                                 flags=sublime.HIDDEN)

                # create rename session
                globals()['_rename_session'] = {
                    'old_name': view.substr(view.sel()[0]),
                    'ctx_region': ctx_region,
                    'caret_pos': caret_pos
                }
예제 #17
0
	def run(self, edit, **kw):
		if not can_run(): return
		view = active_view()

		proj = project.project_for_view(view) or {}
		dfn = ctx.js().locals.ternJumpToDefinition(view, proj.get('id', 'empty'))
		if dfn:
			target_file = dfn['file']

			# resolve target file
			if not os.path.isabs(target_file) and proj.get('id', 'empty')  != 'empty':
				target_file = os.path.join(os.path.dirname(proj['id']), target_file)
				dfn['file'] = target_file

			if target_file != file_name_from_view(view):
				target_view = view.window().open_file(target_file)

				if not target_view.is_loading():
					apply_jump_def(target_view, dfn)
				else:
					globals()['_jump_def'] = dfn
					return
			else:
				apply_jump_def(view, dfn)
예제 #18
0
	def on_load(self, view):
		if is_js_view(view):
			apply_jump_def(view)
			p = project.project_for_view(view)
			if p:
				sync_project(p, True)
예제 #19
0
 def on_load(self, view):
     if is_js_view(view):
         apply_jump_def(view)
         p = project.project_for_view(view)
         if p:
             sync_project(p, True)