Giter Site home page Giter Site logo

mauricioszabo / atom-chlorine Goto Github PK

View Code? Open in Web Editor NEW
176.0 176.0 17.0 31.5 MB

An Atom plugin to integrate with Socket-REPL over Clojure, ClojureScript, ClojureCLR, Joker, Babashka, Clojerl, Lumo and Plank

License: MIT License

Clojure 67.40% JavaScript 12.43% Shell 6.86% Dockerfile 1.95% Less 8.76% CSS 2.60%
atom clj cljs clojure clojurescript lumo repl shadow-cljs socket-repl

atom-chlorine's People

Contributors

barbagrigia avatar chriswatrous avatar dependabot[bot] avatar eneroth avatar laczoka avatar mauricioszabo avatar monkeywithacupcake avatar peter-lyons-kehl avatar rafd avatar seancorfield avatar sogaiu avatar spinnerz avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

atom-chlorine's Issues

Version 0.1.13 is awesome

@mauricioszabo, 0.1.13 has been a huge improvement for me. I really love the truncated inline eval results. This has allowed me to stop worrying about evaluations which return large result sets. I also really like how the console is much less spammy, and only shows errors and explicit prints.

This last commit has really put it over the top of proto-repl for me. Thanks for all of the hard work.

Enable re-opening Console

Hi Maurício,

Thank you for Chlorine.

Say you connect Chlorine to socket repl. It opens the console. Later you close the console by a mistake.

Currently I can't see a way to re-open the console, other than disconnect and connect again. Could you allow re-opening, please.

Instructions for non-vim keybindings in README.md don't work

The keybinding instructions in README.md for "If you don't use vim bindings" includes the line:

'atom-text-editor.vim-mode-plus.normal-mode[data-grammar="source clojure"]':

That didn't work here.

However, changing the line to the following did:

'atom-text-editor[data-grammar="source clojure"]':

Connect to repl without a prompt

Hi. Thanks for the excellent library! I have a minor feature request to make. I'd like to be able to connect to a clojure repl without having to go through a prompt as I almost always use the same port. Would you be open to a PR with one of the two approaches?

  1. Allow for two configurations: a number to specify a default port and a boolean that when set to true allows for connecting without a prompt e.g. the connect command skips right to firing chlorine.repl.connect!
  2. Making chlorine.repl.connect! public so users can create their own command

I'd prefer option 1 because it correctly activates chlorine on initial use while I haven't figured out how to active chlorine with option 2. Also interested if there are other options you can think of. Cheers

Uncaught Error: No protocol method Evaluator.evaluate defined for type null:

Steps to reproduce

  1. I saved the open file, triggering Chlorine to re-load it. (Using simple JVM Clojure reloading.)
  2. A clojure.lang.ExceptionInfo object was printed to my console, in red.
  3. I tried to expand the object; then this Uncaught Error alert popped up

Environment

Atom: 1.46.0 x64
Electron: 4.2.7
OS: Mac OS X 10.15.4
Thrown From: chlorine package 0.6.1

Stack Trace

Uncaught Error: No protocol method Evaluator.evaluate defined for type null:

At /Users/avi.flax/.atom/packages/chlorine/lib/cmds.js:61

Error: No protocol method Evaluator.evaluate defined for type null: 
    at Cb (/packages/chlorine/lib/cmds.js:349:291)
    at vY (/packages/chlorine/lib/cmds.js:1629:220)
    at Function.c (/packages/chlorine/lib/cmds.js:1632:135)
    at /packages/chlorine/lib/cmds.js:2316:198
    at Object.t (/packages/chlorine/lib/cmds.js:40:444)
    at /packages/chlorine/lib/cmds.js:41:28)
    at /packages/chlorine/lib/cmds.js:41:80)
    at /packages/chlorine/lib/cmds.js:41:252)
    at mi (/packages/chlorine/lib/cmds.js:61:54)
    at ae (/packages/chlorine/lib/cmds.js:60:382)
    at Pc (/packages/chlorine/lib/cmds.js:61:217)
    at Xf (/packages/chlorine/lib/cmds.js:63:389)
    at Ff (/packages/chlorine/lib/cmds.js:263:426)
    at /packages/chlorine/lib/cmds.js:43:423)
    at fe (/packages/chlorine/lib/cmds.js:71:207)
    at Sc (/packages/chlorine/lib/cmds.js:70:272)
    at l.unstable_runWithPriority (/packages/chlorine/lib/cmds.js:37:101)
    at cb (/packages/chlorine/lib/cmds.js:89:333)
    at /packages/chlorine/lib/cmds.js:263:286)
    at ui (/packages/chlorine/lib/cmds.js:70:87)

Commands

     -1:04.4.0 core:move-to-bottom (input.hidden-input)
  4x -1:04.1.0 core:move-up (input.hidden-input)
     -1:03.3.0 core:move-down (input.hidden-input)
     -1:02.8.0 editor:move-to-end-of-screen-line (input.hidden-input)
  2x -1:00.6.0 pane:show-next-item (input.hidden-input)
     -0:59.4.0 pane:show-previous-item (atom-workspace.workspace.scrollbars-visible-when-scrolling.theme-one-light-syntax.theme-one-light-ui)
     -0:59.2.0 core:close (atom-workspace.workspace.scrollbars-visible-when-scrolling.theme-one-light-syntax.theme-one-light-ui)
     -0:58.7.0 pane:show-next-item (atom-workspace.workspace.scrollbars-visible-when-scrolling.theme-one-light-syntax.theme-one-light-ui)
  2x -0:55.8.0 pane:show-previous-item (atom-workspace.workspace.scrollbars-visible-when-scrolling.theme-one-light-syntax.theme-one-light-ui)
  2x -0:51.6.0 pane:show-next-item (atom-workspace.workspace.scrollbars-visible-when-scrolling.theme-one-light-syntax.theme-one-light-ui)
     -0:45 editor:cut-to-end-of-line (input.hidden-input)
     -0:45 pane:show-next-item (input.hidden-input)
     -0:41.6.0 core:save (input.hidden-input)
     -0:16.5.0 core:undo (div.console.repl-tooling.native-key-bindings)
     -0:14.9.0 core:redo (input.hidden-input)
     -0:08.4.0 core:save (input.hidden-input)

Non-Core Packages

atom-beautify 0.33.4 
atomic-vale 1.9.0 
busy-signal 2.0.1 
chlorine 0.6.1 
color-picker 2.3.0 
compare-files 0.8.1 
copy-as-rtf 0.9.3 
dark-mode 4.0.2 
django-templates 0.5.0 
document-outline 2.1.2 
file-icons 2.1.40 
file-type-icons 1.3.4 
fold-lines 0.2.2 
fold-navigator 0.0.622 
graphviz-preview-plus 1.5.10 
highlight-line 0.12.0 
highlight-selected 0.17.0 
indent-guide-improved 1.4.13 
ink 0.12.3 
intentions 1.1.5 
language-cypher 0.5.0 
language-docker 1.1.8 
language-dot 1.7.0 
language-email 0.1.7 
language-eml 1.2.5 
language-ini 1.23.0 
language-kotlin 0.5.0 
language-markdown 0.37.0 
language-terraform 0.9.3 
linter 2.3.1 
linter-clojure 1.2.0 
linter-docker 0.3.2 
linter-eslint 8.5.5 
linter-flake8 2.4.0 
linter-joker 4.1.0 
linter-js-yaml 1.4.6 
linter-json-lint 0.1.3 
linter-jsonlint 1.4.0 
linter-kondo 1.2.0 
linter-markdown 5.2.11 
linter-markdownlint 2.0.2 
linter-remark 8.0.0 
linter-rubocop 2.5.7 
linter-shellcheck 1.6.0 
linter-ui-default 1.8.1 
markdown-folding 0.3.1 
markdown-writer 2.11.10 
mixed-indent-warning 0.3.0 
omni-ruler 0.6.0 
proto-repl 1.4.24 
rufo-atom 0.1.2 
sort-lines 0.19.0 
split-diff 1.6.1 
teletype 0.13.4 
title-case 0.4.0 
todo 0.6.0 
todo-show 2.3.2 
trailing-spaces 0.4.0 
tree-view-autoresize 2.3.0 
underline-trailing-whitespace 1.4.2 
wordcount 3.2.0 
Zen 0.18.0 

Uncaught TypeError: Cannot read property 'length' of undefined

  1. launch repl
~ # clj -J-Dclojure.server.repl="{:port 5555 :accept clojure.core.server/repl}"
Clojure 1.10.0
user=> 
  1. eval (map inc [1 2 3]) (Chlorine: Evaluate Selection)

  2. boom

  3. (optional) (try it in the repl tab) - realize I do not know how to eval - Ctrl-C, Ctrl-Enter, Enter, Shift Enter, the "run" icon on top - nothing does anything (also once closed - how to reopen the repl-tab) ?

  4. (optional) as someone who dabbled in enhancing the proto-repl but seeing it not being developed anymore, I'm exited about atom-chlorine - FYI


Atom: 1.33.1 x64
Electron: 3.0.13
OS: "Arch Linux"
Thrown From: chlorine package 0.0.4

Stack Trace

Uncaught TypeError: Cannot read property 'length' of undefined

At /home/birdspider/.atom/packages/chlorine/lib/main.js:13

TypeError: Cannot read property 'length' of undefined
    at na (/packages/chlorine/lib/main.js:13:447)
    at Ht (/packages/chlorine/lib/main.js:774:412)
    at Kt (/packages/chlorine/lib/main.js:777:45)
    at /packages/chlorine/lib/main.js:1237:397)
    at CommandRegistry.handleCommandEvent (/usr/lib/atom/src/command-registry.js:384:43)
    at Object.didConfirmSelection (/usr/lib/atom/node_modules/command-palette/lib/command-palette-view.js:152:29)
    at SelectListView.confirmSelection (/usr/lib/atom/node_modules/atom-select-list/src/select-list-view.js:400:20)
    at HTMLDivElement.core:confirm (/usr/lib/atom/node_modules/atom-select-list/src/select-list-view.js:105:14)
    at CommandRegistry.handleCommandEvent (/usr/lib/atom/src/command-registry.js:384:43)
    at KeymapManager.module.exports.KeymapManager.dispatchCommandEvent (/usr/lib/atom/node_modules/atom-keymap/lib/keymap-manager.js:617:16)
    at KeymapManager.module.exports.KeymapManager.handleKeyboardEvent (/usr/lib/atom/node_modules/atom-keymap/lib/keymap-manager.js:408:22)
    at WindowEventHandler.handleDocumentKeyEvent (/usr/lib/atom/src/window-event-handler.js:110:34)

Commands

     -0:32.9.0 core:select-all (input.hidden-input)
     -0:30.8.0 core:backspace (input.hidden-input)
  2x -0:30.1.0 core:move-down (input.hidden-input)
     -0:29.3.0 core:move-up (input.hidden-input)
     -0:28 core:move-down (input.hidden-input)
     -0:27.5.0 core:page-down (input.hidden-input)
     -0:22.9.0 chlorine:toggle-refresh-mode (input.hidden-input)
     -0:19.1.0 command-palette:toggle (input.hidden-input)
     -0:14.9.0 core:select-all (input.hidden-input)
  8x -0:12.4.0 core:move-down (input.hidden-input)
     -0:10.6.0 core:move-up (input.hidden-input)
     -0:10.3.0 core:confirm (input.hidden-input)
     -0:10.3.0 chlorine:toggle-refresh-mode (input.hidden-input)
     -0:07.8.0 command-palette:toggle (input.hidden-input)
     -0:06.1.0 core:confirm (input.hidden-input)
     -0:06.1.0 chlorine:evaluate-block (input.hidden-input)

Non-Core Packages

atom-beautify 0.33.4 
atom-html-preview 0.2.6 
atom-ide-ui 0.13.0 
atom-ternjs 0.18.3 
blame 1.1.0 
chary-tree-view 0.2.13 
chlorine 0.0.4 
dark-bint-syntax 0.10.0 
docblockr 0.13.7 
editorconfig 2.2.2 
emmet 2.4.3 
file-icons 2.1.27 
file-watcher 2.0.0 
git-plus 8.2.1 
git-status 0.3.4 
hyperclick 0.0.0 
ide-php 0.7.17 
ink 0.9.13 
js-hyperclick 1.13.3 
language-archlinux 0.9.2 
language-pug 0.0.22 
language-textile 0.2.0 
language-unix-shell 0.40.1 
language-vue 0.23.1 
linter 2.2.0 
linter-eslint 8.4.1 
lisp-paredit 0.6.0 
minimap 4.29.9 
minimap-git-diff 4.3.1 
monokai 0.24.0 
parinfer 1.23.0 
pigments 0.40.2 
prettier-atom 0.56.2 
project-manager 3.3.6 
proto-repl 1.4.24 
rst-preview 1.3.1 
sort-lines 0.18.0 
svg-preview 0.14.0 
sync-settings 0.8.6 
textile-preview 0.1.2 
todo-show 2.3.2 

Chlorine not working on MacOSX >= 10.13.6

On MacOSX High Sierra, Chlorine don't work: when you use "Connect to Socket REPL" or "Connect to ClojureScript Socket REPL", it does nothing and un-register those commands.

Strange symbols on REPL

Because some libraries that I work with set ANSI codes on return codes, stdout, or exception messages, the idea was to "reset" ANSI atributes before showing anything on REPL tab or on inline results.

Sometimes, this is showing strange chars on REPL:

�[0m
false

Uncaught Error: No protocol method Evaluator.evaluate defined for type object: [object Object]

After connecting to Clojure, position the cursor on any ClojureScript project and try to evaluate something

Atom: 1.41.0 x64
Electron: 4.2.7
OS: Ubuntu 18.04.3
Thrown From: chlorine package 0.3.7

Stack Trace

Uncaught Error: No protocol method Evaluator.evaluate defined for type object: [object Object]

At /home/mauricio/.atom/packages/chlorine/lib/cmds.js:938

Error: No protocol method Evaluator.evaluate defined for type object: [object Object]
    at Gb (/packages/chlorine/lib/cmds.js:27:65)
    at NP (/packages/chlorine/lib/cmds.js:938:162)
    at AR (/packages/chlorine/lib/cmds.js:1076:273)
    at PS (/packages/chlorine/lib/cmds.js:1141:563)
    at /packages/chlorine/lib/cmds.js:1142:116
    at OS (/packages/chlorine/lib/cmds.js:1141:338)
    at RS (/packages/chlorine/lib/cmds.js:1142:92)
    at /packages/chlorine/lib/cmds.js:1143:243
    at /packages/chlorine/lib/cmds.js:1158:175)
    at CommandRegistry.handleCommandEvent (/usr/share/atom/resources/app/static/<embedded>:11:349392)
    at KeymapManager.dispatchCommandEvent (/usr/share/atom/resources/app/static/<embedded>:11:1252536)
    at KeymapManager.handleKeyboardEvent (/usr/share/atom/resources/app/static/<embedded>:11:1248670)
    at WindowEventHandler.handleDocumentKeyEvent (/usr/share/atom/resources/app/static/<embedded>:11:284598)

Commands

  2x -3:34.3.0 settings-view:open (atom-pane.pane.active)
     -3:29.6.0 core:backspace (input.hidden-input)
  3x -2:52.8.0 core:move-down (select#autocomplete-plus.confirmCompletion.form-control)
     -1:10.5.0 chlorine:connect-socket-repl (input.hidden-input)
     -1:00.0 editor:consolidate-selections (input.hidden-input)
     -0:14.5.0 chlorine:connect-socket-repl (input.hidden-input)
     -0:11.9.0 tree-view:toggle (input.hidden-input)
  5x -0:11.1.0 pane:increase-size (input.hidden-input)
     -0:09.8.0 vim-mode-plus:move-down (input.hidden-input)
     -0:09.5.0 vim-mode-plus:move-up (input.hidden-input)
     -0:09.1.0 vim-mode-plus:move-down (input.hidden-input)
     -0:08.9.0 vim-mode-plus:move-up (input.hidden-input)
  2x -0:08.6.0 chlorine:evaluate-top-block (input.hidden-input)

Non-Core Packages

atom-beautify 0.33.4 
atom-limelight 0.1.3 
chlorine 0.3.7 
chlorine-tests undefined 
clippy 0.5.0 
everything 0.3.0 
ex-mode 0.18.0 
hey-pane 1.2.0 
ink 0.11.6 
last-cursor-position 0.9.3 
lisp-paredit 0.6.0 
parinfer 1.23.0 
platformio-ide-terminal 2.10.0 
set-syntax 0.4.0 
simple-align 0.2.0 
simple-git 0.2.0 
sync-settings 0.8.6 
tmux-terminal 0.0.1 
vim-mode-plus 1.36.2 

Autocomplete on dynamic vars shows regex errors

Using the built-in auto-complete, not Compliment, start typing a dynamic var name like *test-me* in a Clojure file with a connected REPL and you'll see red error messages in the console about invalid regex expressions.

Uncaught NotFoundError: Failed to execute 'removeChild' on 'Node': The node to be removed is not ...

Sometimes, when evaluating code from the Shadow-CLJS REPL that resolves to a promise, this error is issued.

The problematic part is the "ink results" block result.

Atom: 1.41.0 x64
Electron: 4.2.7
OS: Ubuntu 18.04.4
Thrown From: chlorine package 0.4.5

Stack Trace

Uncaught NotFoundError: Failed to execute 'removeChild' on 'Node': The node to be removed is not a child of this node.

At /home/mauricio/.atom/packages/chlorine/node_modules/react-dom/cjs/react-dom.production.min.js:121

Error: Failed to execute 'removeChild' on 'Node': The node to be removed is not a child of this node.
    at Xi (/packages/chlorine/node_modules/react-dom/cjs/react-dom.production.min.js:205:80)
    at ik (/packages/chlorine/node_modules/react-dom/cjs/react-dom.production.min.js:249:52)
    at exports.unstable_runWithPriority (/packages/chlorine/node_modules/scheduler/cjs/scheduler.production.min.js:18:437)
    at fg (/packages/chlorine/node_modules/react-dom/cjs/react-dom.production.min.js:120:325)
    at Yj (/packages/chlorine/node_modules/react-dom/cjs/react-dom.production.min.js:244:437)
    at Lj (/packages/chlorine/node_modules/react-dom/cjs/react-dom.production.min.js:223:420)
    at /packages/chlorine/node_modules/react-dom/cjs/react-dom.production.min.js:121:115
    at exports.unstable_runWithPriority (/packages/chlorine/node_modules/scheduler/cjs/scheduler.production.min.js:18:437)
    at fg (/packages/chlorine/node_modules/react-dom/cjs/react-dom.production.min.js:120:325)
    at ig (/packages/chlorine/node_modules/react-dom/cjs/react-dom.production.min.js:121:61)
    at jg (/packages/chlorine/node_modules/react-dom/cjs/react-dom.production.min.js:120:496)
    at Rg (/packages/chlorine/node_modules/react-dom/cjs/react-dom.production.min.js:214:156)
    at Object.enqueueForceUpdate (/packages/chlorine/node_modules/react-dom/cjs/react-dom.production.min.js:134:76)
    at Object.E.forceUpdate (/packages/chlorine/node_modules/react/cjs/react.production.min.js:13:318)
    at /packages/chlorine/lib/js/cljs-runtime/reagent.impl.batching.js:52:25)
    at reagent.impl.batching.RenderQueue.flush_queues (/packages/chlorine/lib/js/cljs-runtime/reagent.impl.batching.js:146:23)
    at reagent.impl.batching.RenderQueue.run_queues (/packages/chlorine/lib/js/cljs-runtime/reagent.impl.batching.js:157:14)
    at G__29472 (/packages/chlorine/lib/js/cljs-runtime/reagent.impl.batching.js:127:14)

Commands

     -1:31 vim-mode-plus:activate-normal-mode (input.hidden-input)
  2x -1:31 vim-mode-plus:move-down (input.hidden-input)
     -1:30.5.0 vim-mode-plus:move-to-beginning-of-line (input.hidden-input)
  2x -1:30.3.0 vim-mode-plus:move-right (input.hidden-input)
     -1:29.9.0 chlorine:evaluate-top-block (input.hidden-input)
     -1:26 vim-mode-plus:move-to-last-character-of-line (input.hidden-input)
  6x -1:25.5.0 vim-mode-plus:move-up (input.hidden-input)
  3x -1:24.4.0 lisp-paredit:up-sexp (input.hidden-input)
     -1:23.8.0 vim-mode-plus:move-up (input.hidden-input)
  2x -1:23.3.0 chlorine:evaluate-block (input.hidden-input)
     -0:31.6.0 chlorine:clear-console (input.hidden-input)
     -0:31.3.0 inline-results:clear-all (input.hidden-input)
     -0:30.9.0 chlorine:evaluate-top-block (input.hidden-input)
  4x -0:02.9.0 vim-mode-plus:move-up (input.hidden-input)
     -0:02.2.0 vim-mode-plus:move-right (input.hidden-input)
     -0:01.8.0 chlorine:evaluate-top-block (input.hidden-input)

Non-Core Packages

chlorine 0.4.5 
clippy 0.5.0 
everything 0.3.0 
ex-mode 0.18.0 
hey-pane 1.2.0 
ink 0.11.6 
last-cursor-position 0.9.3 
lisp-paredit 0.6.0 
parinfer 1.23.0 
platformio-ide-terminal 2.10.0 
set-syntax 0.4.0 
simple-align 0.2.0 
simple-git 0.2.0 
sync-settings 0.8.6 
tmux-terminal 0.0.1 
vim-mode-plus 1.36.2 

shadow-cljs.edn redundant about source-paths / dependencies?

I was looking at the Shadow CLJS User's Guide and noticed this text in section 3.2.1. (regarding Leiningen):

If you’d like to use Leiningen for your build system (particularly if you use Cursive), the shadow-cljs command-line utility can be configured to use lein to run your commands. Enable this by adding a :lein entry to your shadow-cljs.edn config. With this setting, the shadow-cljs command will use lein to launch the JVM, ignoring any :source-paths and :dependencies in shadow-cljs.edn; relying instead on lein to set them from project.clj.

atom-chlorine's shadow-cljs.edn currently appears to have :lein true -- but it also specifies :source-paths and :dependencies in the same file.

Please explain the intent of the current configuration as it seems confusing.

(This came up because I was attempting to get binaryage/(cljs-)devtools to work and it wasn't clear where to put the dependencies. I tried adding it as a dependency in a few locations without ultimate success.)

Doc: Instructions for starting REPL fail

I get this error:

$ env JVM_OPTS='-Dclojure.server.myrepl={:port,5555,:accept,clojure.core.server/repl}' lein trampoline repl
ClassCastException java.lang.String cannot be cast to java.lang.Number
	nrepl.server/start-server/addr--1156 (server.clj:120)
	nrepl.server/start-server (server.clj:128)
	nrepl.server/start-server (server.clj:96)
	reply.eval-modes.nrepl/get-connection (nrepl.clj:158)

using OSX, Clojure 1.10, JVM 1.8.0_192

Pink-gorilla

Hi!

I watched a talk from you discussing integration of charts and reagent components to chlorine.

We work on a related project
https://github.com/pink-gorilla

We also use reagent to display data in
A web clojure notebook ui.

We are working on a plugin system to
render arbitrary data in reagent render
components that can be added at runtime.

I think there is a good overlap in what we
are trying to do. Should we talk?

Clarify REPL editability?

I tried out Chlorine today, and was very surprised that while typing at the REPL, there was no way to evaluate anything typed.

I chatted w/ Sean Corfield on Slack, and he told me Chlorine can't be typed into. If that's the case, perhaps a visual indicator would be helpful? Either something to indicate the functionality is not there yet, or if you believe people shouldn't type into REPLs, remove entirely the ability to type into it? Currently, it's a bit misleading.

FileNotFound exceptions on connecting Chlorine to Leiningen nREPL on Windows

Hi again,
Sorry if this is not a bug or the right way to contact regarding this issue, I am fairly new. Any help with this would be great, if it's not too much hassle.
When I open a socket REPL with Leiningen from my project's root directory and then connect Chlorine to it, the Chlorine REPL tab displays the following messages:

"Execution error (FileNotFoundException) at inventory.core/eval1560 (form-init18339748147166039704.clj:1).
Could not locate orchard/info__init.class, orchard/info.clj or orchard/info.cljc on classpath.
Execution error (FileNotFoundException) at inventory.core/eval1562 (form-init18339748147166039704.clj:1).
Could not locate orchard/xref__init.class, orchard/xref.clj or orchard/xref.cljc on classpath.
Execution error (FileNotFoundException) at inventory.core/eval1564 (form-init18339748147166039704.clj:1).
Could not locate orchard/clojuredocs__init.class, orchard/clojuredocs.clj or orchard/clojuredocs.cljc on classpath."


The error happens when connecting to nREPL ports. Does not affect the behavior of Chlorine in any way, and the error only happens once.

Warning messages connecting to shadow-cljs build

With a running shadow-cljs server + build, I'm able to "Connect Socket Repl" & immediately eval in JVM Clojure (thanks, that's really great!) but I'm getting a few odd messages when I then try to connect to the browser CLJS.

  1. If I try to eval CLJS before connecting, it suggests You can connect a repl using 'Connect ClojureScript Socket REPL' command, or 'Connect a self-hosted ClojureScript' - Neither of these two commands show up in Ctrl+Shift+P bar, but there is Chlorine: Connect Embedded
  2. If I run that one, multiple warnings show in the Chlorine REPL window as it first connects - I do not have Reagent in any project file, what is calling these?
------ WARNING - :undeclared-ns ------------------------------------------------
 Resource: :27:3
 No such namespace: reagent.ratom, could not locate reagent/ratom.cljs, reagent/ratom.cljc, or JavaScript source providing "reagent.ratom"
------ WARNING - :undeclared-var -----------------------------------------------
 Resource: :27:3
 Use of undeclared Var reagent.ratom/RAtom
------ WARNING - :undeclared-var -----------------------------------------------
 Resource: :32:3
 Use of undeclared Var reagent.ratom/RCursor
--------------------------------------------------------------------------------
  1. After those warnings, I can eval CLJS e.g. (js/alert "Hello") entirely fine.
  2. In a CLJS file, a nil line shows up in the REPL for each character I type that starts to autocomplete eg (str/ (js/ or (desktop. The actual autocomplete results seems OK.
desktop.devcards=> nil
desktop.devcards=> nil
desktop.devcards=> nil
desktop.devcards=> nil
desktop.devcards=> nil
desktop.day1=> nil
desktop.day1=> nil
desktop.day1=> 

Autocomplete is showing fragments of current ns in console

In a CLJS file, a nil line shows up in the REPL for each character I type that starts to autocomplete eg (str/ (js/ or (desktop. The actual autocomplete results seems OK.

desktop.devcards=> nil
desktop.devcards=> nil
desktop.devcards=> nil
desktop.devcards=> nil
desktop.devcards=> nil
desktop.day1=> nil
desktop.day1=> nil
desktop.day1=> 

Related to: #127

Uncaught TypeError: Cannot read property 'getPath' of undefined

[Enter steps to reproduce:]

  1. Open command palette
  2. Run 'chlorine:load-file'

Atom: 1.38.2 x64
Electron: 2.0.18
OS: Mac OS X 10.14.5
Thrown From: chlorine package 0.1.10

Stack Trace

Uncaught TypeError: Cannot read property 'getPath' of undefined

At /Users/paulgureghian/.atom/packages/chlorine/lib/cmds.js:989

TypeError: Cannot read property 'getPath' of undefined
    at HTMLElement.HN (/packages/chlorine/lib/cmds.js:989:30)
    at CommandRegistry.handleCommandEvent (/Users/paulgureghian/Desktop/Atom.app/Contents/Resources/app/static/<embedded>:11:348418)
    at Object.didConfirmSelection (/Users/paulgureghian/Desktop/Atom.app/Contents/Resources/app/static/<embedded>:11:697714)
    at SelectListView.confirmSelection (/Users/paulgureghian/Desktop/Atom.app/Contents/Resources/app/static/<embedded>:11:871573)
    at HTMLDivElement.core:confirm (/Users/paulgureghian/Desktop/Atom.app/Contents/Resources/app/static/<embedded>:11:866452)
    at CommandRegistry.handleCommandEvent (/Users/paulgureghian/Desktop/Atom.app/Contents/Resources/app/static/<embedded>:11:348418)
    at KeymapManager.t.exports.KeymapManager.dispatchCommandEvent (/Users/paulgureghian/Desktop/Atom.app/Contents/Resources/app/static/<embedded>:11:1247210)
    at KeymapManager.t.exports.KeymapManager.handleKeyboardEvent (/Users/paulgureghian/Desktop/Atom.app/Contents/Resources/app/static/<embedded>:11:1243344)
    at WindowEventHandler.handleDocumentKeyEvent (/Users/paulgureghian/Desktop/Atom.app/Contents/Resources/app/static/<embedded>:11:283624)

Commands

     -7:20.3.0 inline:clear-current (input.hidden-input)
     -7:20.3.0 editor:consolidate-selections (input.hidden-input)
     -7:20.3.0 core:cancel (input.hidden-input)
  4x -7:15.5.0 core:backspace (input.hidden-input)
  2x -7:11.1.0 autocomplete-plus:cancel (atom-text-editor.editor.is-focused)
  5x -6:16.4.0 core:select-up (input.hidden-input)
     -6:02.5.0 core:move-up (input.hidden-input)
  3x -6:02.2.0 core:select-up (input.hidden-input)
     -5:47.6.0 command-palette:toggle (input.hidden-input)
  5x -4:07.9.0 core:move-right (input.hidden-input)
  2x -3:29.5.0 core:backspace (input.hidden-input)
     -3:25.7.0 core:move-down (input.hidden-input)
     -3:25.2.0 core:move-up (input.hidden-input)
     -3:22.1.0 core:confirm (input.hidden-input)
     -3:22.1.0 chlorine:load-file (input.hidden-input)
     -0:50.1.0 core:backspace (input.hidden-input)

Non-Core Packages

atom-beautify 0.33.4 
atom-console 0.4.6 
atom-haskell 0.4.0 
autocomplete-haskell 1.0.1 
busy-signal 2.0.1 
chlorine 0.1.10 
haskell-ghc-mod 2.2.5 
haskell-pointfree 0.2.0 
haskell-scry 1.0.9 
hasklig 0.4.0 
ide-haskell 2.4.0 
ide-haskell-cabal 2.2.1 
ide-haskell-hasktags 0.0.16 
ide-haskell-hoogle 0.1.2 
ide-haskell-repl 0.8.7 
ink 0.10.10 
intentions 1.1.5 
language-haskell 1.18.1 
language-haskell-scoped 0.1.1 
linter 2.3.0 
linter-ui-default 1.7.1 
nrepl 0.4.0 
platformio-ide-terminal 2.9.1 

Generic error when evaluating something with errors

When evaluating something like (DateTime.), Chlorine just shows a generic error message.

What is expected is to return something like what you get in the REPL:

CompilerException java.lang.IllegalArgumentException: Unable to resolve classname: DateTime, compiling:(NO_SOURCE_PATH:1:1) 

Console doesn't open on Atom

Atom's version is 0.4.1, Ink's version is 0.11.0, Chlorine is 0.1.11

When connecting to Socket REPL, the console does not open.

Exceptions missing stacktrace

When evaluating big ex-info exceptions, stacktrace is not available.

Example of offending code:

(throw (ex-info (str (range 200)) (->> (range 200)
                                       (map #(vector % (range %)))
                                       (into {}))))

Question: why does doc-for not assume built-in doc function?

I was looking at adding a "show source" function and expected to model it on "doc for var" -- but that seems to do it from first principles.

In ProtoREPL, show docs either uses (doc <varname>) in a cljs REPL or (do (require 'clojure.repl) (clojure.repl/doc <varname>))

Is there a specific reason doc-for doesn't take that (simpler) approach?

ProtoREPL only supports "show source" for Clojure, not cljs, so I would follow the do-require-source approach (and warn on cljs that it is not supported).

Thoughts?

Usage section on project's readme page only showing Unix-y instructions

Hi,
I've just started using Chlorine but had problems getting a socket REPL started as I was unaware that
the instructions for starting a socket REPL with Leiningen as mentioned in the "Usage" section on the main readme page only worked for Unix-like systems and not on Windows:
JVM_OPTS='-Dclojure.server.myrepl={:port,5555,:accept,clojure.core.server/repl}' lein repl

I learned how to get it done on Windows by posting on Clojureverse:
https://clojureverse.org/t/need-help-starting-a-socket-repl-with-lein-on-windows-for-chlorine-use

Would be nice to have instructions on the readme page for anyone trying to get it running on Windows with little programming experience.

developing.md slightly inaccurate regarding copying of resources directory

Attempting to follow the instructions in developing.md, yielded the following error when compiling:

IllegalArgumentException: Cannot open <nil> as a Reader.

It turns out that the instructions say to:

cp repl-tooling/resources .

but that doesn't typically work without some flag for cp (e.g. -a or -r).

Initially, I failed to understand that the directory was the target of copying and copied the contained file instead. This lead to blob-contents failing and seeing the above error.

Please update the instructions appropriately :)

Error while evaluating block, top-level block, and we're not on a form

Atom: 1.30.0 x64
Electron: 2.0.5
OS: Ubuntu 18.04.1
Thrown From: chlorine package 0.0.3

Stack Trace

Uncaught TypeError: Cannot read property 'start' of undefined

At /usr/share/atom/resources/app/node_modules/text-buffer/lib/range.js:33

TypeError: Cannot read property 'start' of undefined
    at Function.module.exports.Range.fromObject (/usr/share/atom/resources/app/node_modules/text-buffer/lib/range.js:33:38)
    at TextBuffer.module.exports.TextBuffer.getTextInRange (/usr/share/atom/resources/app/node_modules/text-buffer/lib/text-buffer.js:549:53)
    at TextEditor.getTextInBufferRange (/usr/share/atom/resources/app/src/text-editor.js:1209:30)
    at /packages/chlorine/lib/js/cljs-runtime/chlorine.repl.js:242:19)
    at /packages/chlorine/lib/js/cljs-runtime/chlorine.repl.js:237:47)
    at /packages/chlorine/lib/js/cljs-runtime/chlorine.core.js:43:47)
    at CommandRegistry.handleCommandEvent (/usr/share/atom/resources/app/src/command-registry.js:384:49)
    at KeymapManager.module.exports.KeymapManager.dispatchCommandEvent (/usr/share/atom/resources/app/node_modules/atom-keymap/lib/keymap-manager.js:621:22)
    at KeymapManager.module.exports.KeymapManager.handleKeyboardEvent (/usr/share/atom/resources/app/node_modules/atom-keymap/lib/keymap-manager.js:412:28)
    at WindowEventHandler.handleDocumentKeyEvent (/usr/share/atom/resources/app/src/window-event-handler.js:110:40)

Commands

     -0:43.3.0 chlorine:evaluate-block (input.hidden-input)
     -0:39.6.0 vim-mode-plus:move-left (input.hidden-input)
     -0:39.2.0 lisp-paredit:expand-selection (input.hidden-input)
     -0:38.9.0 chlorine:evaluate-selection (input.hidden-input)
     -0:37.4.0 vim-mode-plus:activate-normal-mode (input.hidden-input)
     -0:33.3.0 lisp-paredit:expand-selection (input.hidden-input)
     -0:32.7.0 vim-mode-plus:change (input.hidden-input)
     -0:31.7.0 vim-mode-plus:activate-normal-mode (input.hidden-input)
     -0:31.3.0 chlorine:evaluate-top-block (input.hidden-input)
     -0:26.8.0 vim-mode-plus:move-to-last-character-of-line (input.hidden-input)
     -0:23.7.0 vim-mode-plus:move-up (input.hidden-input)
     -0:23.2.0 vim-mode-plus:move-down (input.hidden-input)
     -0:21.9.0 proto-repl:clear-saved-values (input.hidden-input)
     -0:21.9.0 inline-results:clear-all (atom-text-editor.editor.lisp-paredit-strict.indent-mode-76f60.vim-mode-plus.is-focused.normal-mode)
     -0:21.4.0 chlorine:evaluate-block (input.hidden-input)
     -0:11.1.0 chlorine:evaluate-top-block (input.hidden-input)

Non-Core Packages

atom-beautify 0.33.4 
parinfer-plus 0.0.0 
chlorine 0.0.3 
clojure-plus 0.3.0 
everything 0.3.1 
ex-mode 0.18.0 
hard-wrap 1.7.1 
hey-pane 1.1.2 
ink 0.9.12 
language-ansi 1.1.1 
language-haml 0.31.1 
language-scala 1.1.9 
last-cursor-position 0.9.3 
linter 2.2.0 
linter-ui-default 1.7.1 
lisp-paredit 0.6.0 
parinfer 1.23.0 
proto-repl 1.4.24 
set-syntax 0.4.0 
simple-align 0.2.0 
simple-git 0.2.0 
sync-settings 0.8.6 
Termrk 1.0.1 
tmux-terminal 0.0.1 
vim-mode-plus 1.34.0 

Add Figwheel-Main Support

What's Up?

It would be sweet to be able to connect to the figwheel-main repl through atom.

M'kay, tell me more

Based on the quick conversation we had over slack, I wanted to start an issue and to document some of the tips you provided RE: how to tackle this problem. This will also be good to track any progress on this topic.

How to start?

Suggested non-vim bindings in README problematic for some environments?

In at least some Linux distributions, the suggested non-vim bindings are problematic.

All of them start with control comma, but IIUC in a default installation of Atom (at least in the 1.39.x series), this sequence will lead to the equivalent of Edit -> Preferences.

The conflict arose recently when suggesting to someone to try Chlorine. I had worked around it before by using control semicolon, but had forgotten this :)

I don't know if using control semicolon is better for other platforms, but if it isn't, perhaps it's possible to come up with an alternative that works all around, or at least mention in the docs that there might be issues with the suggestions.

Another alternative might be to mention the keymap-control plugin: https://atom.io/packages/keymap-control

After Atom starts, Keymap Control looks inside your keymap.cson file for any keybindings that conflict with keybindings from other packages and automatically unbinds them, removing the conflicts which can prevent your new keybindings from working.

This can remove keybindings from Atom's core just as easily as from 3rd party packages. Any keybindings you set in your keymap.cson file will always take precedence, so you can concentrate on setting the keybindings you want, instead of why they don't work.

I've only briefly tested it, but it appears to work as advertised so far. For reference, I found it via:

atom/atom-keymap#110

Typing url strings throws autocomplete errors on each character after http://

When typing url strings in a connected clojurescript session, I get the following error.

Failed to read: clojure.lang.ExceptionInfo: repl-input.cljs [line 2, col 39] Invalid symbol: https:/a. {:type :reader-exception, :ex-kind :reader-error, :file "repl-input.cljs", :line 2, :col 39}
TypeError: cljs.core.ns_name.split is not a function

Is it possible to check that you are currently typing a symbol and only do namespace lookups then, and not while typing strings?

Uncaught Error: nth not supported on this type function x(a,b,c,d,e){this.kb=a;this.name=b;this.J...

[Enter steps to reproduce:]

  1. ...
  2. ...

Atom: 1.36.1 x64
Electron: 2.0.18
OS: Debian GNU/Linux
Thrown From: chlorine package 0.1.2

Stack Trace

Uncaught Error: nth not supported on this type function x(a,b,c,d,e){this.kb=a;this.name=b;this.Jb=c;this.Lc=d;this.eb=e;this.l=2154168321;this.J=4096}

At /home/markaddleman/.atom/packages/chlorine/lib/main.js:685

Error: nth not supported on this type function x(a,b,c,d,e){this.kb=a;this.name=b;this.Jb=c;this.Lc=d;this.eb=e;this.l=2154168321;this.J=4096}
    at /packages/chlorine/lib/main.js:108:390)
    at yS (/packages/chlorine/lib/main.js:1427:26)
    at /packages/chlorine/lib/main.js:1432:35
    at Function.b (/packages/chlorine/lib/main.js:1430:205)
    at GE (/packages/chlorine/lib/main.js:685:255)
    at /packages/chlorine/lib/main.js:685:410
    at /packages/chlorine/lib/main.js:670:335
    at /packages/chlorine/lib/main.js:665:298)
    at runCallback (timers.js:789:20)
    at tryOnImmediate (timers.js:751:5)
    at processImmediate [as _immediateCallback] (timers.js:722:5)

Commands

     -0:30.3.0 editor:consolidate-selections (input.hidden-input)
     -0:30.3.0 core:cancel (input.hidden-input)
     -0:29.3.0 grammar-selector:show (input.hidden-input)
  8x -0:27.6.0 core:backspace (input.hidden-input)
     -0:22 editor:consolidate-selections (input.hidden-input)
     -0:22 core:cancel (input.hidden-input)
     -0:21.8.0 inline:clear-current (input.hidden-input)
     -0:21.8.0 editor:consolidate-selections (input.hidden-input)
     -0:21.8.0 core:cancel (input.hidden-input)
     -0:21.3.0 command-palette:toggle (input.hidden-input)
     -0:18.7.0 core:confirm (input.hidden-input)
     -0:18.7.0 chlorine:load-file (input.hidden-input)
     -0:16.3.0 command-palette:toggle (input.hidden-input)
     -0:14.1.0 core:move-down (input.hidden-input)
     -0:13.4.0 core:confirm (input.hidden-input)
     -0:13.3.0 chlorine:go-to-var-definition (input.hidden-input)

Non-Core Packages

chlorine 0.1.2 
ink 0.10.5 
parinfer 1.23.0 
teletype 0.13.3 

TextEditor.editorElement is deprecated.

TextEditor.prototype.editorElement has always been private, but now
it is gone. Reading the editorElement property still returns a
reference to the editor element but this field will be removed in a
later version of Atom, so we recommend using the element property instead.

TextEditor.editorElement (<embedded>:1:671452)
<unknown> (/Developer/workspace/atom-chlorine/lib/js/cljs-runtime/chlorine.aux.js:22:21)
Object.save_focus_BANG_ (/Developer/workspace/atom-chlorine/lib/js/cljs-runtime/chlorine.aux.js:24:3)
Object.conn_view (/Developer/workspace/atom-chlorine/lib/js/cljs-runtime/chlorine.ui.connection.js:56:14)
HTMLElement.chlorine$ui$connection$connect_BANG_ (/Developer/workspace/atom-chlorine/lib/js/cljs-runtime/chlorine.ui.connection.js:119:31)
CommandRegistry.handleCommandEvent (<embedded>:11:349858)

Question: How to connect to both Clojure & Clojurescript REPL

Hi Mauricio,
I created a project

lein new luminus testCljCljs +swagger +kee-frame +kibit +shadow-cljs

in which I would like to try to port a Clojure library to ClojureScript. Therefore, your chlorine plugin for Atom could be very helpful. However, I can't get it to connect to the ClojureScript REPL.

I started the Clojure REPL with:

JVM_OPTS='-Dclojure.server.myrepl={:port,5555,:accept,clojure.core.server/repl}' lein repl

and the ClojureScript with:

npx shadow-cljs node-repl

In the file "socket-repl.port" within the folder .shadow-cljs I can see a port number 34089 and when I try to connect to a REPL in Atom (version 1.43.0) with "Chlorine: Connect (Clojure) socket Repl" it proposes this port on localhost. If I leave it this way I do get a connection to the Clojure Repl.
But if I try to "Chlorine: Connect Embedded" for the ClojureScript Repl nothing happens.

What am I doing wrong?
Thanks in advance

PS: If I initially connect to port 5555, I also can't connect to the ClojureScript Repl

Allow splitting Console pane

Hi Maurício,

Thank you for Chlorine.

Could you enable splitting Console into two (and multiple) panes, please.

Why? On a small screen, I have several views of the frequently visited buffers. I use a layout of three panes: two main columns, and one narrow wide row at the bottom. I'd have the Console at the bottom row for most recent results. To see the history, I'd keep another view in one of the columns, but I'd switch to it only if I needed it. That way I don't need to resize panes, I only switch between them. Much more productive.

Erroneous “Failed to refresh” popup message on save

When I’m connected to a socket REPL, every time I save a .clj file in my project I get a Failed to refresh popup message, saying there’s a syntax error in one of my files. The thing is, I’m pretty sure that’s not true; when I load the files manually from the REPL in my terminal they compile just fine.

This is with the following package settings:

  • full namespace refresh with clojure.tools.namespace
  • refresh namespaces on save

Full contents of the popup:

{:ex #error {:via [{:type clojure.lang.Compiler$CompilerException, :message "Syntax error compiling var at (dsl.clj:31:116).", :data {:clojure.error/phase :compile-syntax-check, :clojure.error/line 31, :clojure.error/column 116, :clojure.error/source "dsl.clj", :clojure.error/symbol var}, :at [clojure.lang.Compiler analyzeSeq "Compiler.java" 7114]} {:type java.lang.RuntimeException, :message "Unable to resolve var: clojure.test/*load-tests* in this context", :at [clojure.lang.Util runtimeException "Util.java" 221]}], :trace [[clojure.lang.Util runtimeException "Util.java" 221] [clojure.lang.Compiler$TheVarExpr$Parser parse "Compiler.java" 720] [clojure.lang.Compiler analyzeSeq "Compiler.java" 7106] [clojure.lang.Compiler analyze "Compiler.java" 6789] [clojure.lang.Compiler analyze "Compiler.java" 6745] [clojure.lang.Compiler$InvokeExpr parse "Compiler.java" 3888] [clojure.lang.Compiler analyzeSeq "Compiler.java" 7108] [clojure.lang.Compiler analyze {:repl-tooling/... (unrepl.repl$JheDmiOxCQTNBrUuDsZnDvb59lc/fetch :G__9644)}] {:repl-tooling/... (unrepl.repl$JheDmiOxCQTNBrUuDsZnDvb59lc/fetch :G__9645)}], {:repl-tooling/... nil} {:repl-tooling/... (unrepl.repl$JheDmiOxCQTNBrUuDsZnDvb59lc/fetch :G__9646)}}, {:repl-tooling/... nil} {:repl-tooling/... (unrepl.repl$JheDmiOxCQTNBrUuDsZnDvb59lc/fetch :G__9647)}}

And an image:

screen shot 2019-01-10 at 16 53 58

I’m using:

  • Atom 1.34.0
  • Chlorine 0.0.7
  • Clojure 1.10.0
  • Java 11
  • MacOS 10.13

Thanks for all the great work on Chlorine! Please let me know if there’s any way I can help reproduce this. I could point you to the code I’m loading, for example. Thanks!

remove src/repl-tooling from .gitignore?

When searching via ag (and perhaps other tools?), it seems more convenient for src/repl-tooling to not be ignored, but it is included in .gitignore, so it appears to be under certain invocations.

For example, I was looking for 'connect-unrepl', but the following:

ag -l connect-unrepl

returns:

src/chlorine/repl.cljs

With src/repl-tooling removed from .gitignore, the command returns:

repl-tooling/test/repl_tooling/editor_integration/connection_test.cljs
repl-tooling/src/repl_tooling/editor_integration/connection.cljs
src/chlorine/repl.cljs

At least for someone trying to read and understand both chlorine and repl-tooling, the latter results seem more useful :)

According to git log, it looks like src/repl-tooling was added to .gitignore after repl-tooling was arranged to be a submodule. I'm not sure, but doesn't git ignore submodules by default? I don't know if it's trustworthy, but the following seemed to suggest so:

https://stackoverflow.com/a/7912101

Are there other reasons to have src/repl-tooling in .gitignore?

Uncaught Error: No protocol method IAssociative.-assoc defined for type string: #unrepl/browsable...

Getting this error consistently when attempting to use the Inspect Block command. Loading a file works fine. The specifics of the error message depend on the form being evaluated, what is pasted below is for a def. Doing an Inspect on ns gives "Error: No protocol method IAssociative.-assoc defined for type string: nil", for example.

Atom: 1.43.0 x64
Electron: 4.2.7
OS: Mac OS X 10.15.2
Thrown From: chlorine package 0.4.0

Stack Trace

Uncaught Error: No protocol method IAssociative.-assoc defined for type string: #unrepl/browsable [#clojure/var charts/statement-type-data {:repl-tooling/... (unrepl.repl$3rcwMcc9rCLOH4gMQfLo21mMbCs/fetch :G__9558)}]

At /Users/dave.dixon/.atom/packages/chlorine/lib/cmds.js:36

Error: No protocol method IAssociative.-assoc defined for type string: #unrepl/browsable [#clojure/var charts/statement-type-data {:repl-tooling/... (unrepl.repl$3rcwMcc9rCLOH4gMQfLo21mMbCs/fetch :G__9558)}]
    at Jb (/packages/chlorine/lib/cmds.js:27:65)
    at lc (/packages/chlorine/lib/cmds.js:36:213)
    at Function.S.g (/packages/chlorine/lib/cmds.js:116:36)
    at Function.xh.g (/packages/chlorine/lib/cmds.js:293:99)
    at /packages/chlorine/lib/cmds.js:1141:194
    at Q4 (/packages/chlorine/lib/cmds.js:1544:349)
    at /packages/chlorine/lib/cmds.js:1547:343
    at N4 (/packages/chlorine/lib/cmds.js:1536:818)
    at /packages/chlorine/lib/cmds.js:1547:275
    at W0 (/packages/chlorine/lib/cmds.js:1263:225)
    at /packages/chlorine/lib/cmds.js:1569:371
    at v1 (/packages/chlorine/lib/cmds.js:1277:225)
    at gaa (/packages/chlorine/lib/cmds.js:1284:259)
    at iaa (/packages/chlorine/lib/cmds.js:1285:230)
    at /packages/chlorine/lib/cmds.js:1287:56
    at waa (/packages/chlorine/lib/cmds.js:1302:358)
    at yaa (/packages/chlorine/lib/cmds.js:1304:322)
    at /packages/chlorine/lib/cmds.js:1305:117
    at Fg.g.Te (/packages/chlorine/lib/cmds.js:227:374)
    at Jg (/packages/chlorine/lib/cmds.js:229:237)
    at Function.Kg.g (/packages/chlorine/lib/cmds.js:231:208)
    at /packages/chlorine/lib/cmds.js:1308:450)
    at Socket.emit (events.js:182:13)
    at TCP._handle.close (net.js:606:12)

Commands

  2x -4:11.2.0 core:backspace (input.hidden-input)
     -4:01.9.0 chlorine:connect-clojure-socket-repl (input.hidden-input)
     -3:59.5.0 core:focus-next (input.input-text)
     -3:38.5.0 chlorine:inspect-block (input.hidden-input)
     -3:34.2.0 chlorine:load-file (input.hidden-input)
     -3:31.2.0 chlorine:inspect-block (input.hidden-input)
     -2:59.7.0 chlorine:connect-clojure-socket-repl (input.hidden-input)
     -2:47.8.0 chlorine:load-file (input.hidden-input)
  4x -0:39.2.0 core:backspace (input.hidden-input)
     -0:36.8.0 core:undo (input.hidden-input)
     -0:32.5.0 chlorine:inspect-block (input.hidden-input)

Non-Core Packages

atom-java-decompiler 0.1.2 
chlorine 0.4.0 
ink 0.11.8 
lisp-paredit 0.6.0 
parinfer 1.23.0 
split-diff 1.6.1 

Get specs with Doc for Var

It'd be nice using the Doc for Var functionality if it matched with (doc ...) and showed any known specs!

Uncaught TypeError: Cannot read property 'cljs$core$IFn$_invoke$arity$1' of null

[Enter steps to reproduce:]

  1. Show doc for var on s/keys on ClojureScript, with the following code: (s/keys :)

Atom: 1.41.0 x64
Electron: 4.2.7
OS: Ubuntu 18.04.3
Thrown From: chlorine package 0.3.8

Stack Trace

Uncaught TypeError: Cannot read property 'cljs$core$IFn$_invoke$arity$1' of null

At /home/mauricio/.atom/packages/chlorine/lib/js/cljs-runtime/clojure.zip.js:54

TypeError: Cannot read property 'cljs$core$IFn$_invoke$arity$1' of null
    at /packages/chlorine/lib/js/cljs-runtime/clojure.zip.js:54:13)
    at /packages/chlorine/lib/js/cljs-runtime/repl_tooling.editor_helpers.js:1405:146
    at /packages/chlorine/lib/js/cljs-runtime/repl_tooling.editor_helpers.js:1406:3)
    at /packages/chlorine/lib/js/cljs-runtime/repl_tooling.editor_helpers.js:1430:52)
    at /packages/chlorine/lib/js/cljs-runtime/repl_tooling.editor_integration.doc.js:128:46)
    at /packages/chlorine/lib/js/cljs-runtime/repl_tooling.editor_integration.connection.js:119:44
    at /packages/chlorine/lib/js/cljs-runtime/repl_tooling.editor_integration.connection.js:52:105)
    at /packages/chlorine/lib/js/cljs-runtime/repl_tooling.editor_integration.connection.js:117:51
    at HTMLElement.chlorine.repl.decide_command (/packages/chlorine/lib/js/cljs-runtime/chlorine.repl.js:55:99)
    at CommandRegistry.handleCommandEvent (/usr/share/atom/resources/app/static/<embedded>:11:349392)
    at KeymapManager.dispatchCommandEvent (/usr/share/atom/resources/app/static/<embedded>:11:1252536)
    at KeymapManager.handleKeyboardEvent (/usr/share/atom/resources/app/static/<embedded>:11:1248670)
    at WindowEventHandler.handleDocumentKeyEvent (/usr/share/atom/resources/app/static/<embedded>:11:284598)

Commands

     -1:03.2.0 editor:select-to-end-of-line (input.hidden-input)
     -1:03.0 core:select-left (input.hidden-input)
     -1:01.1.0 core:move-down (input.hidden-input)
     -1:01.1.0 autocomplete-plus:confirm (input.hidden-input)
     -1:00.5.0 editor:move-to-end-of-screen-line (input.hidden-input)
     -1:00.3.0 lisp-paredit:newline (input.hidden-input)
     -0:45.5.0 vim-mode-plus:activate-normal-mode (input.hidden-input)
     -0:44.9.0 inline-results:clear-all (input.hidden-input)
     -0:44 vim-mode-plus:insert-after (input.hidden-input)
     -0:17.4.0 core:move-left (input.hidden-input)
  2x -0:17.2.0 core:select-right (input.hidden-input)
     -0:16 core:backspace (input.hidden-input)
     -0:14.2.0 autocomplete-plus:confirm (input.hidden-input)
     -0:10.3.0 vim-mode-plus:activate-normal-mode (input.hidden-input)
  2x -0:10.2.0 vim-mode-plus:move-left (input.hidden-input)
  2x -0:09.9.0 chlorine:doc-for-var (input.hidden-input)

Non-Core Packages

atom-beautify 0.33.4 
atom-ide-ui 0.13.0 
atom-limelight 0.1.3 
chlorine 0.3.8 
chlorine-tests 0.0.0 
clippy 0.5.0 
everything 0.3.0 
ex-mode 0.18.0 
hey-pane 1.2.0 
ide-php 0.7.18 
ink 0.11.6 
last-cursor-position 0.9.3 
linter 2.3.1 
linter-joker 4.1.0 
lisp-paredit 0.6.0 
parinfer 1.23.0 
platformio-ide-terminal 2.10.0 
set-syntax 0.4.0 
simple-align 0.2.0 
simple-git 0.2.0 
sync-settings 0.8.6 
tmux-terminal 0.0.1 
vim-mode-plus 1.36.2 

Autocomplete error when disconnected

  1. Connect to a socket REPL
  2. Disconnect
  3. Try to auto-complete anything

Uncaught TypeError: Cannot read property 'then' of null

Stack Trace

At /home/mauricio/.atom/packages/chlorine/lib/js/cljs-runtime/chlorine.providers_consumers.autocomplete.js:71

TypeError: Cannot read property 'then' of null
    at /packages/chlorine/lib/js/cljs-runtime/chlorine.providers_consumers.autocomplete.js:71:40)
    at /packages/chlorine/lib/js/cljs-runtime/chlorine.providers_consumers.autocomplete.js:81:122
    at Object.getSuggestions (/packages/chlorine/lib/js/cljs-runtime/chlorine.providers_consumers.autocomplete.js:82:3)
    at providers.forEach.provider (/usr/share/atom/resources/app/node_modules/autocomplete-plus/lib/autocomplete-manager.js:309:58)
    at Array.forEach (<anonymous>)
    at AutocompleteManager.getSuggestionsFromProviders (/usr/share/atom/resources/app/node_modules/autocomplete-plus/lib/autocomplete-manager.js:280:21)
    at AutocompleteManager.findSuggestions (/usr/share/atom/resources/app/node_modules/autocomplete-plus/lib/autocomplete-manager.js:272:23)
    at HTMLElement.autocomplete-plus:activate (/usr/share/atom/resources/app/node_modules/autocomplete-plus/lib/autocomplete-manager.js:245:20)
    at CommandRegistry.handleCommandEvent (/usr/share/atom/resources/app/src/command-registry.js:384:49)
    at KeymapManager.module.exports.KeymapManager.dispatchCommandEvent (/usr/share/atom/resources/app/node_modules/atom-keymap/lib/keymap-manager.js:621:22)
    at KeymapManager.module.exports.KeymapManager.handleKeyboardEvent (/usr/share/atom/resources/app/node_modules/atom-keymap/lib/keymap-manager.js:412:28)
    at WindowEventHandler.handleDocumentKeyEvent (/usr/share/atom/resources/app/src/window-event-handler.js:110:40)

Commands

     -2:46.8.0 vim-mode-plus:move-up (input.hidden-input)
     -1:49.1.0 everything:fuzzy-finder (input.hidden-input)
     -1:47.7.0 core:confirm (input.hidden-input)
     -1:47.7.0 chlorine:disconnect (input.hidden-input)
     -1:46.9.0 vim-mode-plus:insert-after-end-of-line (input.hidden-input)
     -1:46.6.0 lisp-paredit:newline (input.hidden-input)
     -1:45.7.0 autocomplete-plus:activate (input.hidden-input)
     -1:30.3.0 everything:fuzzy-finder (input.hidden-input)
     -1:28.5.0 core:confirm (input.hidden-input)
     -1:28.5.0 chlorine:connect-clojure-socket-repl (input.hidden-input)
     -1:26.6.0 editor:focus (input.hidden-input)
     -1:26.6.0 autocomplete-plus:cancel (atom-text-editor.editor.is-focused)
     -1:25.7.0 editor:delete-to-beginning-of-word (input.hidden-input)
  4x -1:25.4.0 core:backspace (input.hidden-input)
     -1:23.9.0 autocomplete-plus:activate (input.hidden-input)
     -1:22.8.0 autocomplete-plus:confirm (input.hidden-input)

Non-Core Packages

atom-beautify 0.33.4 
parinfer-plus 0.0.0 
chlorine 0.0.6 
clojure-plus 0.3.0 
everything 0.3.1 
ex-mode 0.18.0 
hard-wrap 1.7.1 
hey-pane 1.1.2 
ink 0.9.12 
language-ansi 1.1.1 
language-haml 0.31.1 
language-scala 1.1.9 
last-cursor-position 0.9.3 
linter 2.2.0 
linter-ui-default 1.7.1 
lisp-paredit 0.6.0 
parinfer 1.23.0 
proto-repl 1.4.24 
set-syntax 0.4.0 
simple-align 0.2.0 
simple-git 0.2.0 
sync-settings 0.8.6 
Termrk 1.0.1 
tmux-terminal 0.0.1 
vim-mode-plus 1.34.0 

Uncaught TypeError: Cannot read property 'isDestroyed' of null

[Enter steps to reproduce:]

  1. Occurred when evaluating an ns form.

Rolling back to 0.4.8 seems to fix it.

Atom: 1.44.0 x64
Electron: 4.2.7
OS: Mac OS X 10.15.3
Thrown From: chlorine package 0.4.9

Stack Trace

Uncaught TypeError: Cannot read property 'isDestroyed' of null

At /Users/dave.dixon/.atom/packages/chlorine/lib/cmds.js:1510

TypeError: Cannot read property 'isDestroyed' of null
    at j1 (/packages/chlorine/lib/cmds.js:1510:241)
    at zaa (/packages/chlorine/lib/cmds.js:1512:111)
    at sca (/packages/chlorine/lib/cmds.js:1810:293)
    at H1 (/packages/chlorine/lib/cmds.js:1549:257)
    at Q4 (/packages/chlorine/lib/cmds.js:1784:1041)
    at /packages/chlorine/lib/cmds.js:1792:362
    at P4 (/packages/chlorine/lib/cmds.js:1784:818)
    at Function.e (/packages/chlorine/lib/cmds.js:1792:317)
    at Function.f (/packages/chlorine/lib/cmds.js:1792:442)
    at /packages/chlorine/lib/cmds.js:1821:251)
    at HTMLElement.<anonymous> (/Users/dave.dixon/.atom/init.coffee:69:14)
    at CommandRegistry.handleCommandEvent (/Applications/Atom.app/Contents/Resources/app/static/<embedded>:11:349290)
    at KeymapManager.dispatchCommandEvent (/Applications/Atom.app/Contents/Resources/app/static/<embedded>:11:1253613)
    at KeymapManager.handleKeyboardEvent (/Applications/Atom.app/Contents/Resources/app/static/<embedded>:11:1249747)
    at WindowEventHandler.handleDocumentKeyEvent (/Applications/Atom.app/Contents/Resources/app/static/<embedded>:11:284496)

Commands

     -1:05.3.0 lisp-paredit:expand-selection (atom-text-editor.editor.indent-mode-76f60.is-focused)
     -1:05.3.0 core:delete (atom-text-editor.editor.indent-mode-76f60.is-focused)
     -1:05.2.0 datatip:toggle (input.hidden-input)
     -1:04.9.0 core:backspace (input.hidden-input)
     -1:01.4.0 sparkofreason:inspect-s-exp (input.hidden-input)
     -1:01.4.0 lisp-paredit:expand-selection (atom-text-editor.editor.indent-mode-76f60.is-focused)
     -1:01.4.0 lisp-paredit:contract-selection (atom-text-editor.editor.indent-mode-76f60.is-focused)
     -0:59 chlorine:connect-clojure-socket-repl (input.hidden-input)
  2x -0:45.6.0 parinfer:next-tab-stop (input.hidden-input)
     -0:44.6.0 core:move-down (input.hidden-input)
 13x -0:44.4.0 core:move-left (input.hidden-input)
  2x -0:42.4.0 parinfer:next-tab-stop (input.hidden-input)
     -0:14.2.0 chlorine:connect-clojure-socket-repl (input.hidden-input)
     -0:11.4.0 chlorine:clear-console (input.hidden-input)
     -0:09.4.0 sparkofreason:inspect-s-exp (input.hidden-input)
     -0:09.4.0 lisp-paredit:expand-selection (atom-text-editor.editor.indent-mode-76f60.is-focused)

Non-Core Packages

atom-ide-ui 0.13.0 
atom-java-decompiler 0.1.2 
busy-signal 2.0.1 
chlorine 0.4.9 
go-debug 1.7.0 
go-plus 6.1.0 
go-signature-statusbar 1.2.3 
ide-go 0.12.3 
ink 0.12.2 
intentions 1.1.5 
linter 2.3.1 
linter-kondo 1.2.0 
linter-ui-default 1.8.1 
lisp-paredit 0.6.0 
parinfer 1.23.0 
split-diff 1.6.1 

Attempting to call unbound fn: #'unrepl.core/write

I only use Chlorine here and there, and I’m an overeager software updater, so my environment is evolving regularly… so sometimes when I jump into Chlorine I discover some new bug.

Here’s what I saw just now:

  1. Started my socket REPL from my terminal
  2. Launched Atom
  3. Connected Chlorine to my socket REPL
  4. Invoked Chlorine’s Load File action on my open buffer
  5. Switched to my terminal and attempted to call a fn in a var in the namespace I just loaded

I expected the function to run; instead I got this:

user=> (fc4.io.cli.main-test/check-opts)
Execution error (IllegalStateException) at unrepl.core/non-eliding-write (REPL:31).
Attempting to call unbound fn: #'unrepl.core/write

Screenshots

Atom with my open clj file that I’ve loaded, and the Chlorine REPL window showing the result of the Load File action:

image

My terminal window with my attempt to call the function and the error message:

image

Environment

  • MacOS 10.15.1
  • JRE 13.0.2
  • Clojure 1.10.1.510
  • Atom 1.44.0
  • Chlorine 0.4.10
  • Ink 0.12.2

Full output of java -version:

openjdk version "13.0.2" 2020-01-14
OpenJDK Runtime Environment AdoptOpenJDK (build 13.0.2+8)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 13.0.2+8, mixed mode, sharing)

deps.edn aliases

I’ve reproduced this when loading two of my aliases: test and repl, like so:

clj -A:test:repl

Here are those two aliases from my deps.edn:

{:repl {:jvm-opts    ["-Dclojure.server.repl={:port,5555,:accept,clojure.core.server/repl}"]}

 :test {:extra-paths ["test"]
        :extra-deps  {org.clojure/test.check     {:mvn/version "0.10.0"}
                      cloverage                  {:mvn/version "1.1.1"}
                      eftest                     {:mvn/version "0.5.8"}
                      orchestra                  {:mvn/version "2018.12.06-2"}
                      image-resizer              {:mvn/version "0.1.10"}
                      info.debatty/java-string-similarity {:mvn/version "1.2.1"}}
        ; It’s crucial to ensure that the JVM’s default character encoding is
        ; UTF-8 because the renderer outputs UTF-8 encoded text to its stderr,
        ; which the main program (the JVM program) then needs to read correctly.
        ; We’ve found that some Linux systems seem to default to US-ASCII which
        ; will generally break the ability of the main program to properly parse
        ; the error output of the renderer.
        :jvm-opts    ["-Dfile.encoding=UTF8"
                      ; Prevent the Java app icon from popping up and grabbing
                      ; focus on MacOS.
                      "-Dapple.awt.UIElement=true"
                      "-XX:-OmitStackTraceInFastThrow"
                      "--illegal-access=deny"
                      "-Djava.awt.headless=true"]}}

Uncaught Error: Index 30 out of bounds [0,29]

[Enter steps to reproduce:]

  1. Select the whole of the buffer
  2. Execute "Chlorine: Evaluate Selection"
  3. Boom

Atom: 1.44.0 x64
Electron: 4.2.12
OS: "Arch Linux"
Thrown From: chlorine package 0.4.5

Stack Trace

Uncaught Error: Index 30 out of bounds [0,29]

At /home/joni/.atom/packages/chlorine/lib/cmds.js:307

Error: Index 30 out of bounds [0,29]
    at ci.g.vc (/packages/chlorine/lib/cmds.js:307:65)
    at ci.g.G (/packages/chlorine/lib/cmds.js:309:266)
    at Function.P.g (/packages/chlorine/lib/cmds.js:104:59)
    at Function.Bh.g (/packages/chlorine/lib/cmds.js:278:99)
    at U_ (/packages/chlorine/lib/cmds.js:1098:152)
    at /packages/chlorine/lib/cmds.js:1491:289
    at P4 (/packages/chlorine/lib/cmds.js:1490:952)
    at /packages/chlorine/lib/cmds.js:1491:241
    at O4 (/packages/chlorine/lib/cmds.js:1490:818)
    at /packages/chlorine/lib/cmds.js:1491:160)
    at /packages/chlorine/lib/cmds.js:1492:509
    at /packages/chlorine/lib/cmds.js:1511:137)
    at CommandRegistry.handleCommandEvent (/usr/lib/atom/src/command-registry.js:405:43)
    at Object.didConfirmSelection (/usr/lib/atom/node_modules/command-palette/lib/command-palette-view.js:152:29)
    at SelectListView.confirmSelection (/usr/lib/atom/node_modules/atom-select-list/src/select-list-view.js:400:20)
    at HTMLDivElement.core:confirm (/usr/lib/atom/node_modules/atom-select-list/src/select-list-view.js:105:14)
    at CommandRegistry.handleCommandEvent (/usr/lib/atom/src/command-registry.js:405:43)
    at KeymapManager.module.exports.KeymapManager.dispatchCommandEvent (/usr/lib/atom/node_modules/atom-keymap/lib/keymap-manager.js:617:16)
    at KeymapManager.module.exports.KeymapManager.handleKeyboardEvent (/usr/lib/atom/node_modules/atom-keymap/lib/keymap-manager.js:408:22)
    at WindowEventHandler.handleDocumentKeyEvent (/usr/lib/atom/src/window-event-handler.js:153:34)

Commands

     -0:39.3.0 core:cancel (input.hidden-input)
  4x -0:38.5.0 atomic-emacs:previous-line (input.hidden-input)
  3x -0:34.4.0 core:page-up (input.hidden-input)
     -0:33.5.0 atomic-emacs:previous-line (input.hidden-input)
     -0:32.4.0 atomic-emacs:set-mark (input.hidden-input)
  5x -0:31.2.0 core:page-down (input.hidden-input)
     -0:29 atomic-emacs:copy-region-as-kill (input.hidden-input)
  6x -0:25.6.0 core:page-up (input.hidden-input)
     -0:24.4.0 atomic-emacs:set-mark (input.hidden-input)
  4x -0:23.4.0 core:page-down (input.hidden-input)
     -0:21 command-palette:toggle (input.hidden-input)
     -0:18.1.0 core:confirm (input.hidden-input)
     -0:18.1.0 chlorine:evaluate-block (input.hidden-input)
     -0:12.6.0 command-palette:toggle (input.hidden-input)
     -0:10 core:confirm (input.hidden-input)
     -0:09.9.0 chlorine:evaluate-selection (input.hidden-input)

Non-Core Packages

advanced-open-file 0.16.8 
atom-beautify 0.33.4 
atom-haskell 0.4.0 
atom-haskell-hie 0.5.0 
atom-ide-ui 0.13.0 
atomic-emacs 0.15.0 
autocomplete-haskell 1.0.1 
busy-signal 2.0.1 
chlorine 0.4.5 
clojure-lsp-adapter 0.1.0 
haskell-ghc-mod 2.2.5 
haskell-pointfree 0.2.0 
haskell-scry 1.0.9 
hasklig 0.4.0 
highlight-selected 0.17.0 
Hydrogen 2.13.1 
ide-haskell 2.4.1 
ide-haskell-cabal 2.3.0 
ide-haskell-hasktags 0.0.16 
ide-haskell-hoogle 0.1.2 
ide-haskell-repl 0.9.0 
ide-rust 0.21.2 
ink 0.11.8 
intentions 1.1.5 
language-haskell 1.19.4 
language-haskell-scoped 0.1.1 
languageserver-rust 0.3.0 
linter 2.3.1 
linter-joker 4.1.0 
linter-ui-default 1.8.1 
lisp-paredit 0.6.0 
nord-atom-syntax 0.10.0 
nord-atom-ui 0.12.0 
proto-repl 1.4.24 
proto-repl-charts 0.4.1 
proto-repl-sayid 0.1.4 
rainbow-delimiters 2.1.2 
rustfmt 0.1.3 
tool-bar 1.2.0 
Zen 0.18.0 

Auto-complete (clj) fails when ns is undetermined

If you are typing into the ns form and you have a syntactically invalid form (for example, you've typed : for :as or :refer and auto-complete kicks in), then the edn_reader.parse() call will fail and ns-for will return null.

In the clj-compliment function, it calls symbol unconditionally on ns-name -- which will throw an exception if ns-name is nil.

Suggest changing the beginning of that function to:

(defn- clj-compliment [repl ns-name text prefix row col]
  (let [ns (when ns-name (symbol ns-name))
        context (make-context text prefix row col)

(guarding the symbol call)

Submodule-related initialization is inconvenient

I'm asked for an ssh password when trying to clone the repository with the repl-tooling submodule.

Editing .gitmodules so that in the submodule section, url's value uses the https://... method of addressing instead of [email protected]... seemed to help, though subsequently editing .git/config's submodule section's url's value also appeared to be necessary. After making these changes, I was not asked for a password when initializing/updating submodules.

Please consider making some appropriate changes so this kind of procedure is unnecessary or if there's something I'm missing, please enlighten me :)

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.