Initial commit
This commit is contained in:
@@ -0,0 +1 @@
|
||||
3.8
|
||||
@@ -0,0 +1 @@
|
||||
LSP-prolog implements a Sublime Text package providing support for a Prolog LSP, based off of Scryer Prolog.
|
||||
@@ -0,0 +1,10 @@
|
||||
[
|
||||
{
|
||||
"caption": "Preferences: LSP-prolog Settings",
|
||||
"command": "edit_settings",
|
||||
"args": {
|
||||
"base_file": "${packages}/LSP-prolog/LSP-prolog.sublime-settings",
|
||||
"default": "// Settings in here override those in \"LSP-prolog/LSP-prolog.sublime-settings\"\n\n{\n\t$0\n}\n"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
// The command used to start the Prolog language server. This requires a
|
||||
// build of scryer-prolog (https://github.com/mthom/scryer-prolog) whose
|
||||
// "--lsp" flag runs a built-in LSP server communicating over stdio.
|
||||
// If scryer-prolog is not on your PATH, change this to the absolute path
|
||||
// of the binary.
|
||||
"enable": true,
|
||||
"command": [
|
||||
"scryer-prolog",
|
||||
"--lsp"
|
||||
],
|
||||
// Which files this language server should be used for.
|
||||
"selector": "source.prolog",
|
||||
"settings": {}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
[
|
||||
{
|
||||
"id": "preferences",
|
||||
"children": [
|
||||
{
|
||||
"caption": "Package Settings",
|
||||
"mnemonic": "P",
|
||||
"id": "package-settings",
|
||||
"children": [
|
||||
{
|
||||
"caption": "LSP",
|
||||
"id": "lsp-settings",
|
||||
"children": [
|
||||
{
|
||||
"caption": "Servers",
|
||||
"id": "lsp-servers",
|
||||
"children": [
|
||||
{
|
||||
"caption": "LSP-prolog",
|
||||
"command": "edit_settings",
|
||||
"args": {
|
||||
"base_file": "${packages}/LSP-prolog/LSP-prolog.sublime-settings",
|
||||
"default": "// Settings in here override those in \"LSP-prolog/LSP-prolog.sublime-settings\"\n\n{\n\t$0\n}\n"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,30 @@
|
||||
# LSP-prolog
|
||||
|
||||
Prolog support for Sublime's [LSP](https://packagecontrol.io/packages/LSP) package, via
|
||||
[scryer-prolog](https://github.com/mthom/scryer-prolog)'s built-in `--lsp` server.
|
||||
|
||||
## Requirements
|
||||
|
||||
* The [LSP](https://packagecontrol.io/packages/LSP) package.
|
||||
* A build of scryer-prolog whose `--lsp` flag runs a language server over stdio.
|
||||
As of this writing that support only exists in a development fork; the flag is
|
||||
not yet in released/upstream scryer-prolog builds. Make sure `scryer-prolog` is
|
||||
on your `PATH`, or set the `command` setting below to its full path.
|
||||
* A Prolog syntax package that assigns the `source.prolog` scope to `.pl`/`.pro` files
|
||||
(LSP-prolog itself does not ship syntax highlighting).
|
||||
|
||||
## Installation
|
||||
|
||||
Clone or copy this directory into your Sublime Text `Packages` folder as `LSP-prolog`,
|
||||
then restart Sublime Text.
|
||||
|
||||
## Configuration
|
||||
|
||||
Open `Preferences > Package Settings > LSP > Servers > LSP-prolog` to edit settings.
|
||||
|
||||
```jsonc
|
||||
{
|
||||
"command": ["scryer-prolog", "--lsp"],
|
||||
"selector": "source.prolog"
|
||||
}
|
||||
```
|
||||
@@ -0,0 +1,18 @@
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
def reload_plugin() -> None:
|
||||
import sys
|
||||
|
||||
prefix = "{}.".format(__package__)
|
||||
|
||||
for module_name in tuple(
|
||||
filter(lambda m: m.startswith(prefix) and m != __name__, sys.modules)
|
||||
):
|
||||
del sys.modules[module_name]
|
||||
|
||||
|
||||
reload_plugin()
|
||||
|
||||
|
||||
from .plugin import * # noqa: F401, F403, E402
|
||||
@@ -0,0 +1,20 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from LSP.plugin import register_plugin
|
||||
from LSP.plugin import unregister_plugin
|
||||
|
||||
from .plugin import ScryerProlog
|
||||
|
||||
__all__ = (
|
||||
# ST: Core
|
||||
"plugin_loaded",
|
||||
"plugin_unloaded",
|
||||
)
|
||||
|
||||
|
||||
def plugin_loaded() -> None:
|
||||
register_plugin(ScryerProlog)
|
||||
|
||||
|
||||
def plugin_unloaded() -> None:
|
||||
unregister_plugin(ScryerProlog)
|
||||
@@ -0,0 +1,32 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from shutil import which
|
||||
|
||||
from LSP.plugin import AbstractPlugin
|
||||
from LSP.plugin import ClientConfig
|
||||
from LSP.plugin import WorkspaceFolder
|
||||
import sublime
|
||||
|
||||
|
||||
class ScryerProlog(AbstractPlugin):
|
||||
@classmethod
|
||||
def name(cls) -> str:
|
||||
return "prolog"
|
||||
|
||||
@classmethod
|
||||
def can_start(
|
||||
cls,
|
||||
window: sublime.Window,
|
||||
initiating_view: sublime.View,
|
||||
workspace_folders: list[WorkspaceFolder],
|
||||
configuration: ClientConfig,
|
||||
) -> str | None:
|
||||
command = configuration.command[0] if configuration.command else "scryer-prolog"
|
||||
binary = sublime.expand_variables(command, {"packages": sublime.packages_path()})
|
||||
if which(binary):
|
||||
return None
|
||||
return (
|
||||
f'Could not find "{command}" on your PATH. LSP-prolog requires a build of scryer-prolog with '
|
||||
'"--lsp" support (see https://github.com/mthom/scryer-prolog). Install it, or set the "command" '
|
||||
"setting in LSP-prolog.sublime-settings to the full path of the binary."
|
||||
)
|
||||
Reference in New Issue
Block a user