Skip to content

Commit

Permalink
Clean up for review.
Browse files Browse the repository at this point in the history
  • Loading branch information
olafurpg committed Jul 2, 2017
1 parent 74e22bf commit eff9590
Show file tree
Hide file tree
Showing 6 changed files with 41 additions and 71 deletions.
Original file line number Diff line number Diff line change
@@ -1,20 +1,17 @@
package metadoc

import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.Future
import scala.concurrent.Promise
import scala.meta._
import scala.scalajs.js
import scala.scalajs.js.JSConverters._
import scala.scalajs.js.typedarray.TypedArrayBuffer
import org.scalajs.dom
import scala.meta._
import metadoc.schema.Index
import monaco.Monaco
import monaco.editor.IEditorConstructionOptions
import monaco.languages.ILanguageExtensionPoint
import scala.concurrent.{Future, Promise}
import scala.concurrent.ExecutionContext.Implicits.global
import monaco.Uri
import monaco.editor.IEditorModel
import monaco.editor.IEditorOverrideServices
import monaco.editor.IModelChangedEvent
import monaco.languages.ILanguageExtensionPoint
import org.scalajs.dom

object MetadocApp extends js.JSApp {
def url(path: String): String =
Expand Down Expand Up @@ -73,7 +70,7 @@ object MetadocApp extends js.JSApp {
overrides.editorService = editorService
val editor = monaco.editor.Editor.create(app, options, overrides)
editor.asInstanceOf[js.Dynamic].getControl = { () =>
// NOTE: getControl() is defined on SimpleEditor.
// NOTE: getControl() is defined on SimpleEditor and is called when changing files.
editor
}
editorService.editor = editor
Expand All @@ -82,8 +79,7 @@ object MetadocApp extends js.JSApp {
dom.document.getElementById("title").textContent = path
})

val model = monaco.editor.Editor
.createModel(contents, "scala", monaco.Uri.parse(s"file:$fileName"))
val model = createModel(contents, fileName)
editor.setModel(model)

dom.window.addEventListener("resize", (_: dom.Event) => editor.layout())
Expand Down
23 changes: 23 additions & 0 deletions metadoc-js/src/main/scala/metadoc/MetadocEditorService.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package metadoc

import scala.concurrent.Future
import scala.scalajs.js
import scala.scalajs.js.annotation.ScalaJSDefined
import monaco.Promise
import monaco.editor.Editor
import monaco.editor.IEditor
import monaco.editor.IEditorService
import monaco.editor.IResourceInput

@ScalaJSDefined
class MetadocEditorService extends IEditorService {
var editor: IEditor = _
override def openEditor(
input: IResourceInput,
sideBySide: js.UndefOr[Boolean]
): Promise[IEditor] = {
val model = Editor.getModel(input.resource)
editor.setModel(model)
Future.successful(editor).toMonacoPromise
}
}
30 changes: 0 additions & 30 deletions metadoc-js/src/main/scala/metadoc/MetadocTextModelService.scala
Original file line number Diff line number Diff line change
@@ -1,61 +1,31 @@
package metadoc

import scala.collection.mutable
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.Future
import scala.meta.internal.semantic.{schema => s}
import scala.scalajs.js
import scala.scalajs.js.JSConverters._
import scala.scalajs.js.annotation.ScalaJSDefined
import monaco.Promise
import monaco.Thenable
import monaco.Uri
import monaco.common.IReference
import monaco.editor.Editor
import monaco.editor.IEditor
import monaco.editor.IEditorService
import monaco.editor.IModel
import monaco.editor.IResourceInput
import monaco.services.ITextEditorModel
import monaco.services.ITextModelResolverService
import org.scalameta.logger

@ScalaJSDefined
class MetadocEditorService extends IEditorService {
var editor: IEditor = _
override def openEditor(
input: IResourceInput,
sideBySide: js.UndefOr[Boolean]
): Promise[IEditor] = {
logger.elem(input.resource)
val model = Editor.getModel(input.resource)
editor.setModel(model)
Future.successful(editor).toMonacoPromise
}
}

@ScalaJSDefined
class MetadocTextModelService extends ITextModelResolverService {
override def createModelReference(
resource: Uri
): Promise[IReference[ITextEditorModel]] = {
logger.elem(resource)
val existingModel = Editor.getModel(resource)
if (existingModel != null) {
logger.elem(existingModel)
Promise.as(IReference(ITextEditorModel(existingModel)))
} else {
logger.elem("YEAH!!!!", resource.path)
val future = for {
bytes <- MetadocApp.fetchBytes(MetadocApp.url(resource.path))
} yield {
val attrs = s.Attributes.parseFrom(bytes)
val model = Editor.createModel(attrs.contents, "scala", resource)
IReference(ITextEditorModel(model))
}
future.onComplete { newModel =>
logger.elem(newModel)
}
future.toMonacoPromise
}
}
Expand Down
23 changes: 0 additions & 23 deletions metadoc-js/src/main/scala/metadoc/ScalaTextContentProvider.scala

This file was deleted.

14 changes: 9 additions & 5 deletions metadoc-js/src/main/scala/metadoc/package.scala
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.Future
import scala.scalajs.js
Expand All @@ -9,7 +8,7 @@ import monaco.languages.Location
import monaco.Range
import monaco.Thenable
import monaco.Uri
import org.scalameta.logger
import monaco.editor.IModel

package object metadoc {

Expand All @@ -34,6 +33,12 @@ package object metadoc {
def jsObject[T <: js.Object]: T =
(new js.Object()).asInstanceOf[T]

def createModel(value: String, filename: String): IModel =
monaco.editor.Editor.createModel(value, "scala", createUri(filename))

def createUri(filename: String): Uri =
Uri.parse(s"semanticdb:$filename")

implicit class XtensionFutureToThenable[T](future: Future[T]) {
import scala.scalajs.js.JSConverters._
// This method allows us to work with Future[T] in metadoc and convert
Expand All @@ -42,7 +47,7 @@ package object metadoc {
Promise.wrap(future.toJSPromise.asInstanceOf[Thenable[T]])
}

def resolveLocation(model: IReadOnlyModel)(pos: Position) = {
def resolveLocation(model: IReadOnlyModel)(pos: Position): Location = {
val startPos = model.getPositionAt(pos.start)
val endPos = model.getPositionAt(pos.end)
val range = new Range(
Expand All @@ -51,8 +56,7 @@ package object metadoc {
endPos.lineNumber,
endPos.column
)
val uri = Uri.parse(s"file:${pos.filename}")
logger.elem(uri, uri.path)
val uri = createUri(pos.filename)
// FIXME: load new file content
new Location(uri, range)
}
Expand Down
2 changes: 1 addition & 1 deletion metadoc-js/src/main/scala/monaco/MonacoServices.scala
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ package services {
}

object ITextEditorModel {
def apply(model: IModel) = new ITextEditorModel {
def apply(model: IModel): ITextEditorModel = new ITextEditorModel {
override def textEditorModel: IModel = model
}
}
Expand Down

0 comments on commit eff9590

Please sign in to comment.