jaredly / reason-language-server

A language server for reason, in reason
MIT License
659 stars 84 forks source link

bs-platform not detected when it's in a parent directory from the bsconfig.json #58

Closed dmisdm closed 6 years ago

dmisdm commented 6 years ago

Hi there! Love this project!

Environment

Background

Using reason to share code in workspaces/monorepos is seriously a brilliant experience (using yarn workspaces which hoists dependencies) compared to sharing code with flow or ts. Maybe its just me...

Problem (supposedly)

When running in a project that has hoisted dependencies, for example with yarn workspaces, where dependencies are likely to be located in the node_modules dir in parent directories (and not next to bsconfig.json), i get Unix.Unix_error(Unix.ENOENT, \"opendir\", \"/Users/dmisdm/dev/test-workspace/project1/node_modules/bs-platform/lib/ocaml\"). The actual location of bs-platform, reason-react and other deps are in /Users/dmisdm/dev/test-workspace/node_modules/

this is the debug.log

Got source directories ./src - ./src/types - ./src/contexts - ./src/_assets - ./src/_assets/illustrations - ./src/_assets/icons - ./src/_assets/fonts - ./src/Toolbar - ./src/Toolbar/Settings - ./src/PDF - ./src/components - ./src/components/Drawing - ./src/components/TOC - ./src/components/DictionaryPopover - ./src/components/PopperToolbar - ./src/components/Annotations - ./src/components/Bookmarks - ./src/components/Notifications - ./src/components/LearningToolbar - ./src/lib - ./src/lib/annotator - ./src/_shared - ./src/_shared/ReaderSidebar - ./src/_shared/SwipeableViews - ./src/EPUB
Source directories: /Users/dmisdm/dev/test-workspace/project1/src - /Users/dmisdm/dev/test-workspace/project1/src/types - /Users/dmisdm/dev/test-workspace/project1/src/contexts - /Users/dmisdm/dev/test-workspace/project1/src/_assets - /Users/dmisdm/dev/test-workspace/project1/src/_assets/illustrations - /Users/dmisdm/dev/test-workspace/project1/src/_assets/icons - /Users/dmisdm/dev/test-workspace/project1/src/_assets/fonts - /Users/dmisdm/dev/test-workspace/project1/src/Toolbar - /Users/dmisdm/dev/test-workspace/project1/src/Toolbar/Settings - /Users/dmisdm/dev/test-workspace/project1/src/PDF - /Users/dmisdm/dev/test-workspace/project1/src/components - /Users/dmisdm/dev/test-workspace/project1/src/components/Drawing - /Users/dmisdm/dev/test-workspace/project1/src/components/TOC - /Users/dmisdm/dev/test-workspace/project1/src/components/DictionaryPopover - /Users/dmisdm/dev/test-workspace/project1/src/components/PopperToolbar - /Users/dmisdm/dev/test-workspace/project1/src/components/Annotations - /Users/dmisdm/dev/test-workspace/project1/src/components/Bookmarks - /Users/dmisdm/dev/test-workspace/project1/src/components/Notifications - /Users/dmisdm/dev/test-workspace/project1/src/components/LearningToolbar - /Users/dmisdm/dev/test-workspace/project1/src/lib - /Users/dmisdm/dev/test-workspace/project1/src/lib/annotator - /Users/dmisdm/dev/test-workspace/project1/src/_shared - /Users/dmisdm/dev/test-workspace/project1/src/_shared/ReaderSidebar - /Users/dmisdm/dev/test-workspace/project1/src/_shared/SwipeableViews - /Users/dmisdm/dev/test-workspace/project1/src/EPUB
Source files found: /Users/dmisdm/dev/test-workspace/project1/src/App.re
With compiled base: /Users/dmisdm/dev/test-workspace/project1/lib/bs/src/App.cmt : /Users/dmisdm/dev/test-workspace/project1/src/App.re
Deps @readcloud/reason-common, @glennsl/bs-json, bs-axios, bs-css, @glennsl/bs-jest, reason-react
Dep loc /Users/dmisdm/dev/test-workspace/project1/node_modules/@readcloud/reason-common/bsconfig.json
Skipping nonexistent dependency: @readcloud/reason-common
Dep loc /Users/dmisdm/dev/test-workspace/project1/node_modules/@glennsl/bs-json/bsconfig.json
Skipping nonexistent dependency: @glennsl/bs-json
Dep loc /Users/dmisdm/dev/test-workspace/project1/node_modules/bs-axios/bsconfig.json
Skipping nonexistent dependency: bs-axios
Dep loc /Users/dmisdm/dev/test-workspace/project1/node_modules/bs-css/bsconfig.json
Skipping nonexistent dependency: bs-css
Dep loc /Users/dmisdm/dev/test-workspace/project1/node_modules/@glennsl/bs-jest/bsconfig.json
Skipping nonexistent dependency: @glennsl/bs-jest
Dep loc /Users/dmisdm/dev/test-workspace/project1/node_modules/reason-react/bsconfig.json
Skipping nonexistent dependency: reason-react
Failed to get initial state
Sending response {"id": 0, "jsonrpc": "2.0", "error": {"code": -32603, "message": "Unix.Unix_error(Unix.ENOENT, \"opendir\", \"/Users/dmisdm/dev/test-workspace/project1/node_modules/bs-platform/lib/ocaml\")Raised by primitive operation at file \"/Users/jared/clone/tools/reason-language-server/src/util/Files.re\", line 177, characters 7-24\nCalled from file \"/Users/jared/clone/tools/reason-language-server/src/util/FindFiles.re\", line 135, characters 17-47\nCalled from file \"/Users/jared/clone/tools/reason-language-server/src/util/FindFiles.re\", line 176, characters 2-22\nCalled from file \"list.ml\", line 55, characters 20-23\nCalled from file \"/Users/jared/clone/tools/reason-language-server/src/util/FindFiles.re\", line 230, characters 36-74\nCalled from file \"/Users/jared/clone/tools/reason-language-server/src/analyze/State.re\", line 124, characters 51-125\nCalled from file \"/Users/jared/clone/tools/reason-language-server/src/util/Monads.re\", line 203, characters 18-24\nCalled from file \"/Users/jared/clone/tools/reason-language-server/src/lsp/Main.re\", line 83, characters 30-58\nCalled from file \"/Users/jared/clone/tools/reason-language-server/src/lsp/BasicServer.re\", line 113, characters 13-38\n"}}
Finished

Workarounds

Anyway just thought id mention it. Cheers, thanks for all the work!

jaredly commented 6 years ago

ok, so if bs-platform isn't in the node_modules where I expect it, I should crawl up the directory tree looking for other node_modules? That sounds reasonable.

jaredly commented 6 years ago

Ok, I don't think this should be too complicated. If you want to tackle this, I would suggest doing the search for bs-platform here, and then passing that correct bs-platform directory into the various places that use it, including various places in BuildSystem.re and in FindFiles.re.

dmisdm commented 6 years ago

Awesome thanks. Ill give it a shot, would love to get traction on contributing.

dmisdm commented 6 years ago

For reference: https://nodejs.org/api/modules.html#modules_all_together