Skip to content
This repository was archived by the owner on Apr 1, 2020. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion browser/src/App.ts
Original file line number Diff line number Diff line change
Expand Up @@ -283,12 +283,13 @@ export const start = async (args: string[]): Promise<void> => {

const CompletionProviders = await completionProvidersPromise
CompletionProviders.activate(languageManager)
const completionProviders = CompletionProviders.getInstance()

const initializeAllEditors = async () => {
await startEditors(
filesToOpen,
Colors.getInstance(),
CompletionProviders.getInstance(),
completionProviders,
configuration,
diagnostics,
languageManager,
Expand Down
24 changes: 17 additions & 7 deletions browser/src/Editor/NeovimEditor/NeovimEditor.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,9 @@ import WildMenu from "./../../UI/components/WildMenu"
import { CanvasRenderer } from "../../Renderer/CanvasRenderer"
import { WebGLRenderer } from "../../Renderer/WebGL/WebGLRenderer"
import { getInstance as getNotificationsInstance } from "./../../Services/Notifications"
import NeovimCompletionsRequestor, {
INeovimWithCompletions,
} from "../../Services/Completion/NeovimCompletionsRequestor"

type NeovimError = [number, string]

Expand Down Expand Up @@ -240,13 +243,13 @@ export class NeovimEditor extends Editor implements Oni.Editor {
</Provider>,
)

this._popupMenu = new NeovimPopupMenu(
this._neovimInstance.onShowPopupMenu,
this._neovimInstance.onHidePopupMenu,
this._neovimInstance.onSelectPopupMenu,
this.onBufferEnter,
this._toolTipsProvider,
)
// this._popupMenu = new NeovimPopupMenu(
// this._neovimInstance.onShowPopupMenu,
// this._neovimInstance.onHidePopupMenu,
// this._neovimInstance.onSelectPopupMenu,
// this.onBufferEnter,
// this._toolTipsProvider,
// )

const notificationManager = getNotificationsInstance()
this._neovimInstance.onMessage.subscribe(messageInfo => {
Expand Down Expand Up @@ -729,6 +732,13 @@ export class NeovimEditor extends Editor implements Oni.Editor {
}),
)

const neovimCompletion = new NeovimCompletionsRequestor(this
.neovim as INeovimWithCompletions)
this._completionProviders.registerCompletionProvider(
"oni.completions.neovim",
neovimCompletion,
)

this._commands = new NeovimEditorCommands(
commandManager,
this._contextMenuManager,
Expand Down
55 changes: 55 additions & 0 deletions browser/src/Services/Completion/NeovimCompletionsRequestor.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
import { NeovimEditorCapability } from "oni-api"
import { CompletionItem, CompletionItemKind } from "vscode-languageserver-types"
import { CompletionsRequestContext, ICompletionsRequestor } from "./CompletionsRequestor"
import { INeovimCompletionInfo } from "../../neovim"
import { IEvent, IDisposable } from "oni-types"

export interface INeovimWithCompletions extends NeovimEditorCapability {
onHidePopupMenu: IEvent<void>
onShowPopupMenu: IEvent<INeovimCompletionInfo>
}

export default class NeovimCompletionsRequestor implements ICompletionsRequestor {
private _completions: CompletionItem[] = []
// @ts-ignore
private _subscriptions: IDisposable[]

constructor(private _neovim: INeovimWithCompletions) {
this._setupSubscriptions()
}

private _setupSubscriptions() {
this._subscriptions = [
this._neovim.onShowPopupMenu.subscribe(this._addNeovimCompletion),
this._neovim.onHidePopupMenu.subscribe(this._clearNeovimCompletions),
]
}

public async getCompletions(context: CompletionsRequestContext) {
console.log("this._completions: ", this._completions)
return this._completions
}

public async getCompletionDetails(
fileLanguage: string,
filePath: string,
completionItem: CompletionItem,
): Promise<CompletionItem> {
return null
}

private _addNeovimCompletion(completionInfo: INeovimCompletionInfo) {
const items = completionInfo.items.map(item => {
return {
label: item.word,
kind: CompletionItemKind.Keyword,
detail: item.info,
}
})
this._completions = items
}

public _clearNeovimCompletions() {
this._completions = []
}
}
1 change: 1 addition & 0 deletions browser/src/neovim/NeovimInstance.ts
Original file line number Diff line number Diff line change
Expand Up @@ -839,6 +839,7 @@ export class NeovimInstance extends EventEmitter implements INeovimInstance {
break
case "popupmenu_show":
const [items, selected, row, col] = a[0]
console.log("ITEMS!!!!!: ", items)

const mappedItems = items.map((item: string[]) => {
const [word, kind, menu, info] = item
Expand Down