Published Goto package for better goto symbols support


#1

I’ve just published the Goto package which replaces the existing symbols-view with a version that uses Atom syntax files.

The built-in symbols-view requires ctags for generating symbols. I think using Atom’s syntax files will be better because once it is working it works for all new syntax files.

  • The ctags project cannot keep up with all of the new syntax files that will be created for Atom
  • More importantly they won’t have time / interest for every new syntax
  • Hacking ctags to make changes is not nearly as easy has hacking an Atom package.
  • It is far more difficult to architect incremental updates to the tags.

The Goto package implements the same commands and assigns them to the same keys. They should overwrite the original keybindings (Cmd-R, etc.) but you should probably disable symbols-view to avoid complications.

The mechanism for identifying symbols is working for Javascript, Coffeescript, and Less. If it is not identifying symbols for a language you are interested in, please open a bug and I’ll update Goto to improve the recognition of symbols.


#2

This is pretty awesome! It works really well. I might take a stab at speeding up the project wide search using a background process.


#3

Great! Something to think about while working on it is that the design goal is to keep the
symbols fully up to date as transparently as possible.

I’ve started with an in-memory index because it is easy to incrementally update. I don’t know
of a SQLite style database that already ships with node or Atom and didn’t want to be reading
and writing large files all the time yet. That would also make it more difficult to coordinate
with a background indexer. (Though I suppose the background indexer could generate temporary
files that the foreground process could later read. Hmmm.)

I do cache symbols and invalidate them when a files is modified via an editor. Each command
will only regenerate symbols for modified files.

I also want to monitor the project directory, but being new to node I’m not sure how to do so
in an efficient manor. Most solutions seem to require a file watcher for every directory and
file.

I need to design something to queue up changes that can be batched in the background, but also
quickly burst all of files when a command is executed. I plan on using the octocat spinner
when that happens :slight_smile: