GithubHelp home page GithubHelp logo

makovich / ensime-atom Goto Github PK

View Code? Open in Web Editor NEW

This project forked from d6y/atom-ensime

0.0 2.0 0.0 224 KB

ENSIME Atom plugin for Scala developers

License: MIT License

CoffeeScript 78.27% JavaScript 18.86% CSS 2.88%

ensime-atom's Introduction

Atom Ensime

Join the chat at https://gitter.im/ensime/ensime-atom

This is a work in progress to try to use Ensime functionality in Atom Way early still and will most likely be very buggy. Or maybe not start at all. Please try it out, be patient and report any issues!

Prerequisites

Getting started

  • Open a project with a .ensime in root
  • Make sure to put path of sbt in settings.
  • cmd-shift-P Ensime: Start.
  • Then you can use the features marked x below :)

Complementing packages

Automatically installed:

Recomended:

Features:

  • Jump to definition (cmd-click or f4)

  • Hover for type info

  • Errors and warnings (Cmnds for typecheck file, typecheck buffer, typecheck all). Also setting for typecheck current file on save or while typing.

  • Basic autocompletion

  • Format source file

  • mark applied implicits (conversions and params)

  • show applied implicits

  • Goto type by simple typing prefix (like cmd-N in Idea or cmd-shift-T in Eclipse?)

  • Organize imports

  • Import type at point

  • Better errors and warnings with markings in gutter

  • "explicify" applied implicits

  • Find all subclasses of the class under the cursor

  • Find all usages of the function under the cursor

  • insert your suggestion

Dev

  • checkout from git straight into .atom/packages (or ln -s). Need to have the right name on the folder: "Ensime".
  • run apm install
  • "Window: reload" (ctrl-option-cmd l) to reload plugin from source while developing
  • In developer tools: client = atom.packages.getActivePackage('Ensime').mainModule.client client.getImportSuggestions('ApiLogRequest')

Discuss:

https://groups.google.com/forum/#!searchin/ensime/log/ensime/1dWUQwnFoyk/0O12KPjaIBgJ https://gitter.im/ensime/ensime-atom

Technical TODO:

  • checkout typescript plugin for hover for type info
  • option to start server detached for ease of debugging: https://nodejs.org/api/child_process.html#child_process_options_detached
  • update server log in a panel in atom
  • Use port file to check for running server
  • Remove "start-server" and let init do it all
  • EditorControl leaks and keeps swank client on stop. Fix some cleanup!
  • Remove flowController-thing and look at Haskell IDE.
  • Make "start ensime" to start server(maybe) and client and "stop ensime" kill both
  • setting for typechecking current file: ask, on save, while typing + delay ms setting
  • only try start server if no port-file
  • put console logging under dev-flag or just move to separate log
  • Handle types of autocompletion. Weird swank?
  • TEEEESTS! Mostly because turnaround is killing me
  • re-insert activation events when this hits atom/settings-view#371
  • Make update of server implicit from startup'
  • Seems we're dependent on language-scala package. At least code-links doesn't seem to realize .scala are source.scala)
  • ditch swank for jerk
  • Setting for autocomplete - "excludeLowerPriority"
  • Autocomplete: :type-sig (((("x" "Int") ("y" "Int"))) "Int")
  • Separate each feature in own Editor Controller?
  • See if we can use code-links for mouse clicks https://atom.io/packages/code-links (Not gonna do it)
  • Check if we can get rid of terminal escape stuff from log. Look at term2 or ask.
  • getPath is deprecated: https://github.com/atom/atom/blob/master/src/project.coffee#L471 Maybe need to ask about where .ensime is like Emacs.
  • Multiple instances - BIG REFACTORING
  • Really need to lookup instances out of source folder from .ensimes. Just path prefix against project folder doesn't work since sbt meta project typically resides inside.
  • Hook to switch out bottom pane on change of text editor
  • Start/stop ui with server/client info
  • Don't use jquery lookup for https://github.com/atom/status-bar
  • Listen to editors and add custom attribute per instance. https://atom.io/docs/api/v1.2.4/CommandRegistry#instance-add. Then we probably can add commands for just those editors?
  • [ ]
  • Use path.dirname(module.filename) instead of package name lookup? https://github.com/paulpflug/vue-hello-world/blob/master/lib/vue-hello-world.coffee#L31
  • Use .vue https://github.com/vuejs/vueify#compiler-api
  • If error with "not found" -> alt-enter for quick import just like idea
  • Check out https://github.com/OmniSharp/omnisharp-atom Seems we can learn a lot!
  • Wait for analyzer ready msg - (:return (:abort 209 "Analyzer is not ready! Please wait.") 4)
  • server will stop logging when atom is reloaded since stdio is piped via node. Pipe to file directly from process and tail -f to buffer in atom?
  • add a bottom panel with tabs (one for errors/warnings, one for server log maybe)
  • Look how https://github.com/OmniSharp/omnisharp-atom/wiki makes autocomplete and linter install automatically
  • Rewrite core parts in scala.js, reuse msg classes from ensime and so forth. Make atom interface for scala.js.
  • Someday it would be cool to not use exploded single tree for dep-src so that one have more control like "open on github" of ensime: 404: https://github.com/xebia/cakemix/blob/master/.ensime_cache/dep-src/source-jars/scala/concurrent/duration/package.scala#L17

Inspiration (steal if you can)

Links

ensime-atom's People

Contributors

d6y avatar gitter-badger avatar hedefalk avatar raboof avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.