Compare commits
12 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
68bbc8187b | ||
|
|
0916b888d8 | ||
|
|
cd7ba40b55 | ||
|
|
7b68a4e0fe | ||
|
|
60c376a5fd | ||
|
|
a28d3803ad | ||
|
|
691beef1dc | ||
|
|
2a5983f9aa | ||
|
|
bff7990e7d | ||
|
|
981150e308 | ||
|
|
6de2cc3867 | ||
|
|
1fefcb4cba |
1
.github/CODEOWNERS
vendored
Normal file
1
.github/CODEOWNERS
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
* @regen100
|
||||||
36
.github/workflows/publish.yml
vendored
36
.github/workflows/publish.yml
vendored
@@ -5,22 +5,26 @@ on:
|
|||||||
tags:
|
tags:
|
||||||
- v*
|
- v*
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build-n-publish:
|
publish:
|
||||||
name: Build and publish
|
name: Publish to PyPI
|
||||||
runs-on: ubuntu-18.04
|
runs-on: ubuntu-22.04
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@master
|
- name: Checkout
|
||||||
- name: Set up Python 3.7
|
uses: actions/checkout@v3
|
||||||
uses: actions/setup-python@v1
|
- name: Set up PDM
|
||||||
|
uses: pdm-project/setup-pdm@v3
|
||||||
|
- name: Build
|
||||||
|
run: |
|
||||||
|
pdm build
|
||||||
|
- name: Publish package
|
||||||
|
uses: pypa/gh-action-pypi-publish@release/v1
|
||||||
with:
|
with:
|
||||||
python-version: 3.7
|
password: ${{ secrets.PYPI_PASSWORD }}
|
||||||
- name: Install dependencies
|
- name: Release
|
||||||
run: |
|
uses: softprops/action-gh-release@v1
|
||||||
python -m pip install poetry
|
with:
|
||||||
- name: Build a binary wheel and a source tarball
|
generate_release_notes: true
|
||||||
run: |
|
|
||||||
poetry build
|
|
||||||
- name: Publish distribution to PyPI
|
|
||||||
run: |
|
|
||||||
poetry publish -u __token__ -p ${{ secrets.pypi_password }}
|
|
||||||
|
|||||||
31
.github/workflows/tests.yml
vendored
31
.github/workflows/tests.yml
vendored
@@ -1,6 +1,10 @@
|
|||||||
name: Tests
|
name: Tests
|
||||||
|
|
||||||
on: [pull_request]
|
on:
|
||||||
|
pull_request:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
@@ -8,36 +12,41 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
python: ["3.6", "3.7", "3.8", "3.9", "3.10"]
|
python: ["3.7", "3.8", "3.9", "3.10", "3.11"]
|
||||||
os: [ubuntu-18.04, windows-2019]
|
os: [ubuntu-22.04, windows-2022]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
- name: Set up Python ${{ matrix.python }}
|
- name: Set up Python ${{ matrix.python }}
|
||||||
uses: actions/setup-python@v2
|
uses: actions/setup-python@v4
|
||||||
with:
|
with:
|
||||||
python-version: ${{ matrix.python }}
|
python-version: ${{ matrix.python }}
|
||||||
|
- name: Set up PDM
|
||||||
|
uses: pdm-project/setup-pdm@v3
|
||||||
|
with:
|
||||||
|
python-version: ${{ matrix.python }}
|
||||||
|
cache: true
|
||||||
- name: Setup VC
|
- name: Setup VC
|
||||||
uses: ilammy/msvc-dev-cmd@v1
|
uses: ilammy/msvc-dev-cmd@v1
|
||||||
if: contains(matrix.os, 'windows')
|
if: contains(matrix.os, 'windows')
|
||||||
- name: Install CMake
|
- name: Install CMake
|
||||||
if: contains(matrix.os, 'ubuntu')
|
if: contains(matrix.os, 'ubuntu')
|
||||||
run: |
|
run: |
|
||||||
CMAKE_VERSION=3.17.3
|
CMAKE_VERSION=3.25.1
|
||||||
curl -sSL https://github.com/Kitware/CMake/releases/download/v$CMAKE_VERSION/cmake-$CMAKE_VERSION-Linux-x86_64.tar.gz | tar xz
|
curl -sSL https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION}/cmake-${CMAKE_VERSION}-linux-x86_64.tar.gz | tar xz
|
||||||
sudo cp -rT cmake-$CMAKE_VERSION-Linux-x86_64 /usr/local
|
sudo cp -rT cmake-${CMAKE_VERSION}-linux-x86_64 /usr/local
|
||||||
rm -rf cmake-$CMAKE_VERSION-Linux-x86_64
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: |
|
run: |
|
||||||
cmake --version
|
cmake --version
|
||||||
python -m pip install --upgrade setuptools pip wheel
|
python -m pip install --upgrade setuptools pip wheel
|
||||||
python -m pip install poetry tox-gh-actions
|
python -m pip install tox tox-gh-actions
|
||||||
- name: Test with tox
|
- name: Test with tox
|
||||||
run: |
|
run: |
|
||||||
tox
|
tox
|
||||||
env:
|
env:
|
||||||
os: ${{ matrix.os }}
|
os: ${{ matrix.os }}
|
||||||
- name: Upload coverage reports to Codecov
|
- name: Upload coverage reports to Codecov
|
||||||
uses: codecov/codecov-action@v1
|
uses: codecov/codecov-action@v3
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.CODECOV_TOKEN }}
|
token: ${{ secrets.CODECOV_TOKEN }}
|
||||||
flags: unittests
|
flags: unittests
|
||||||
|
|||||||
9
.gitignore
vendored
9
.gitignore
vendored
@@ -1,4 +1,13 @@
|
|||||||
|
cmake_language_server/version.py
|
||||||
|
|
||||||
|
/build/
|
||||||
|
/dist/
|
||||||
__pycache__/
|
__pycache__/
|
||||||
|
|
||||||
.tox/
|
.tox/
|
||||||
|
|
||||||
.coverage
|
.coverage
|
||||||
coverage.xml
|
coverage.xml
|
||||||
|
|
||||||
|
.pdm-python
|
||||||
|
__pypackages__/
|
||||||
|
|||||||
@@ -12,12 +12,11 @@ Alpha Stage, work in progress.
|
|||||||
## Features
|
## Features
|
||||||
- [x] Builtin command completion
|
- [x] Builtin command completion
|
||||||
- [x] Documentation for commands and variables on hover
|
- [x] Documentation for commands and variables on hover
|
||||||
- [x] Formatting
|
- [x] Formatting (by [`cmake-format`](https://github.com/cheshirekow/cmake_format))
|
||||||
|
|
||||||
## Commands
|
## Commands
|
||||||
|
|
||||||
- `cmake-language-server`: LSP server
|
- `cmake-language-server`: LSP server
|
||||||
- `python -m cmake_language_server.formatter`: CLI frontend for formatting
|
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
|
|||||||
3
cmake_language_server/__init__.py
Normal file
3
cmake_language_server/__init__.py
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
from .version import __version__
|
||||||
|
|
||||||
|
__all__ = ["__version__"]
|
||||||
@@ -1,17 +1,17 @@
|
|||||||
import logging
|
import logging
|
||||||
import re
|
import re
|
||||||
|
import shutil
|
||||||
|
import subprocess
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Any, Callable, List, Optional, Tuple
|
from typing import Any, Callable, List, Optional, Tuple
|
||||||
|
|
||||||
from pygls.lsp.methods import (
|
from lsprotocol.types import (
|
||||||
COMPLETION,
|
|
||||||
FORMATTING,
|
|
||||||
HOVER,
|
|
||||||
INITIALIZE,
|
INITIALIZE,
|
||||||
INITIALIZED,
|
INITIALIZED,
|
||||||
|
TEXT_DOCUMENT_COMPLETION,
|
||||||
TEXT_DOCUMENT_DID_SAVE,
|
TEXT_DOCUMENT_DID_SAVE,
|
||||||
)
|
TEXT_DOCUMENT_FORMATTING,
|
||||||
from pygls.lsp.types import (
|
TEXT_DOCUMENT_HOVER,
|
||||||
CompletionItem,
|
CompletionItem,
|
||||||
CompletionItemKind,
|
CompletionItemKind,
|
||||||
CompletionList,
|
CompletionList,
|
||||||
@@ -25,27 +25,23 @@ from pygls.lsp.types import (
|
|||||||
MarkupKind,
|
MarkupKind,
|
||||||
Position,
|
Position,
|
||||||
Range,
|
Range,
|
||||||
|
SaveOptions,
|
||||||
TextDocumentPositionParams,
|
TextDocumentPositionParams,
|
||||||
TextDocumentSaveRegistrationOptions,
|
|
||||||
TextEdit,
|
TextEdit,
|
||||||
)
|
)
|
||||||
from pygls.server import LanguageServer
|
from pygls.server import LanguageServer
|
||||||
|
|
||||||
from .api import API
|
from .api import API
|
||||||
from .formatter import Formatter
|
|
||||||
from .parser import ListParser
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class CMakeLanguageServer(LanguageServer):
|
class CMakeLanguageServer(LanguageServer):
|
||||||
_parser: ListParser
|
|
||||||
_api: Optional[API]
|
_api: Optional[API]
|
||||||
|
|
||||||
def __init__(self, *args: Any) -> None:
|
def __init__(self, *args: Any) -> None:
|
||||||
super().__init__(*args)
|
super().__init__(*args)
|
||||||
|
|
||||||
self._parser = ListParser()
|
|
||||||
self._api = None
|
self._api = None
|
||||||
|
|
||||||
@self.feature(INITIALIZE)
|
@self.feature(INITIALIZE)
|
||||||
@@ -62,7 +58,8 @@ class CMakeLanguageServer(LanguageServer):
|
|||||||
trigger_characters = ["{", "("]
|
trigger_characters = ["{", "("]
|
||||||
|
|
||||||
@self.feature(
|
@self.feature(
|
||||||
COMPLETION, CompletionOptions(trigger_characters=trigger_characters)
|
TEXT_DOCUMENT_COMPLETION,
|
||||||
|
CompletionOptions(trigger_characters=trigger_characters),
|
||||||
)
|
)
|
||||||
def completions(params: CompletionParams) -> CompletionList:
|
def completions(params: CompletionParams) -> CompletionList:
|
||||||
assert self._api is not None
|
assert self._api is not None
|
||||||
@@ -151,16 +148,20 @@ class CMakeLanguageServer(LanguageServer):
|
|||||||
|
|
||||||
return CompletionList(is_incomplete=False, items=items)
|
return CompletionList(is_incomplete=False, items=items)
|
||||||
|
|
||||||
@self.feature(FORMATTING)
|
if shutil.which("cmake-format") is not None:
|
||||||
def formatting(params: DocumentFormattingParams) -> Optional[List[TextEdit]]:
|
|
||||||
doc = self.workspace.get_document(params.text_document.uri)
|
|
||||||
content = doc.source
|
|
||||||
tokens, remain = self._parser.parse(content)
|
|
||||||
if remain:
|
|
||||||
self.show_message("CMake parser failed")
|
|
||||||
return None
|
|
||||||
|
|
||||||
formatted = Formatter().format(tokens)
|
@self.feature(TEXT_DOCUMENT_FORMATTING)
|
||||||
|
def formatting(
|
||||||
|
params: DocumentFormattingParams,
|
||||||
|
) -> Optional[List[TextEdit]]:
|
||||||
|
doc = self.workspace.get_text_document(params.text_document.uri)
|
||||||
|
content = doc.source
|
||||||
|
formatted = subprocess.check_output(
|
||||||
|
["cmake-format", "-"],
|
||||||
|
cwd=str(Path(doc.path).parent),
|
||||||
|
input=content,
|
||||||
|
universal_newlines=True,
|
||||||
|
)
|
||||||
lines = content.count("\n")
|
lines = content.count("\n")
|
||||||
return [
|
return [
|
||||||
TextEdit(
|
TextEdit(
|
||||||
@@ -172,7 +173,7 @@ class CMakeLanguageServer(LanguageServer):
|
|||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
||||||
@self.feature(HOVER)
|
@self.feature(TEXT_DOCUMENT_HOVER)
|
||||||
def hover(params: TextDocumentPositionParams) -> Optional[Hover]:
|
def hover(params: TextDocumentPositionParams) -> Optional[Hover]:
|
||||||
assert self._api is not None
|
assert self._api is not None
|
||||||
api = self._api
|
api = self._api
|
||||||
@@ -200,7 +201,7 @@ class CMakeLanguageServer(LanguageServer):
|
|||||||
@self.thread()
|
@self.thread()
|
||||||
@self.feature(
|
@self.feature(
|
||||||
TEXT_DOCUMENT_DID_SAVE,
|
TEXT_DOCUMENT_DID_SAVE,
|
||||||
TextDocumentSaveRegistrationOptions(include_text=False),
|
SaveOptions(include_text=False),
|
||||||
)
|
)
|
||||||
@self.feature(INITIALIZED)
|
@self.feature(INITIALIZED)
|
||||||
def run_cmake(*args: Any) -> None:
|
def run_cmake(*args: Any) -> None:
|
||||||
@@ -210,14 +211,14 @@ class CMakeLanguageServer(LanguageServer):
|
|||||||
self._api.read_reply()
|
self._api.read_reply()
|
||||||
|
|
||||||
def _cursor_function(self, uri: str, position: Position) -> Optional[str]:
|
def _cursor_function(self, uri: str, position: Position) -> Optional[str]:
|
||||||
doc = self.workspace.get_document(uri)
|
doc = self.workspace.get_text_document(uri)
|
||||||
lines = doc.source.split("\n")[: position.line + 1]
|
lines = doc.source.split("\n")[: position.line + 1]
|
||||||
lines[-1] = lines[-1][: position.character - 1].strip()
|
lines[-1] = lines[-1][: position.character - 1].strip()
|
||||||
words = re.split(r"[\s\n()]+", "\n".join(lines))
|
words = re.split(r"[\s\n()]+", "\n".join(lines))
|
||||||
return words[-1] if words else None
|
return words[-1] if words else None
|
||||||
|
|
||||||
def _cursor_line(self, uri: str, position: Position) -> str:
|
def _cursor_line(self, uri: str, position: Position) -> str:
|
||||||
doc = self.workspace.get_document(uri)
|
doc = self.workspace.get_text_document(uri)
|
||||||
content = doc.source
|
content = doc.source
|
||||||
line = content.split("\n")[position.line]
|
line = content.split("\n")[position.line]
|
||||||
return str(line)
|
return str(line)
|
||||||
@@ -254,4 +255,4 @@ def main() -> None:
|
|||||||
|
|
||||||
logging.basicConfig(level=logging.INFO)
|
logging.basicConfig(level=logging.INFO)
|
||||||
logging.getLogger("pygls").setLevel(logging.WARNING)
|
logging.getLogger("pygls").setLevel(logging.WARNING)
|
||||||
CMakeLanguageServer().start_io() # type: ignore
|
CMakeLanguageServer("cmake-language-server", __version__).start_io()
|
||||||
568
pdm.lock
generated
Normal file
568
pdm.lock
generated
Normal file
@@ -0,0 +1,568 @@
|
|||||||
|
# This file is @generated by PDM.
|
||||||
|
# It is not intended for manual editing.
|
||||||
|
|
||||||
|
[metadata]
|
||||||
|
groups = ["default", "dev", "lint"]
|
||||||
|
cross_platform = true
|
||||||
|
static_urls = false
|
||||||
|
lock_version = "4.3"
|
||||||
|
content_hash = "sha256:80a5c705d477865a92cd50fa41774545541967eaa96e64bf34514c5baf4e3d6d"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "attrs"
|
||||||
|
version = "22.2.0"
|
||||||
|
requires_python = ">=3.6"
|
||||||
|
summary = "Classes Without Boilerplate"
|
||||||
|
files = [
|
||||||
|
{file = "attrs-22.2.0-py3-none-any.whl", hash = "sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836"},
|
||||||
|
{file = "attrs-22.2.0.tar.gz", hash = "sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "black"
|
||||||
|
version = "22.12.0"
|
||||||
|
requires_python = ">=3.7"
|
||||||
|
summary = "The uncompromising code formatter."
|
||||||
|
dependencies = [
|
||||||
|
"click>=8.0.0",
|
||||||
|
"mypy-extensions>=0.4.3",
|
||||||
|
"pathspec>=0.9.0",
|
||||||
|
"platformdirs>=2",
|
||||||
|
"tomli>=1.1.0; python_full_version < \"3.11.0a7\"",
|
||||||
|
"typed-ast>=1.4.2; python_version < \"3.8\" and implementation_name == \"cpython\"",
|
||||||
|
"typing-extensions>=3.10.0.0; python_version < \"3.10\"",
|
||||||
|
]
|
||||||
|
files = [
|
||||||
|
{file = "black-22.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9eedd20838bd5d75b80c9f5487dbcb06836a43833a37846cf1d8c1cc01cef59d"},
|
||||||
|
{file = "black-22.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:159a46a4947f73387b4d83e87ea006dbb2337eab6c879620a3ba52699b1f4351"},
|
||||||
|
{file = "black-22.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d30b212bffeb1e252b31dd269dfae69dd17e06d92b87ad26e23890f3efea366f"},
|
||||||
|
{file = "black-22.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:7412e75863aa5c5411886804678b7d083c7c28421210180d67dfd8cf1221e1f4"},
|
||||||
|
{file = "black-22.12.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c116eed0efb9ff870ded8b62fe9f28dd61ef6e9ddd28d83d7d264a38417dcee2"},
|
||||||
|
{file = "black-22.12.0-cp37-cp37m-win_amd64.whl", hash = "sha256:1f58cbe16dfe8c12b7434e50ff889fa479072096d79f0a7f25e4ab8e94cd8350"},
|
||||||
|
{file = "black-22.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77d86c9f3db9b1bf6761244bc0b3572a546f5fe37917a044e02f3166d5aafa7d"},
|
||||||
|
{file = "black-22.12.0-cp38-cp38-win_amd64.whl", hash = "sha256:82d9fe8fee3401e02e79767016b4907820a7dc28d70d137eb397b92ef3cc5bfc"},
|
||||||
|
{file = "black-22.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:101c69b23df9b44247bd88e1d7e90154336ac4992502d4197bdac35dd7ee3320"},
|
||||||
|
{file = "black-22.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:559c7a1ba9a006226f09e4916060982fd27334ae1998e7a38b3f33a37f7a2148"},
|
||||||
|
{file = "black-22.12.0-py3-none-any.whl", hash = "sha256:436cc9167dd28040ad90d3b404aec22cedf24a6e4d7de221bec2730ec0c97bcf"},
|
||||||
|
{file = "black-22.12.0.tar.gz", hash = "sha256:229351e5a18ca30f447bf724d007f890f97e13af070bb6ad4c0a441cd7596a2f"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "cattrs"
|
||||||
|
version = "22.2.0"
|
||||||
|
requires_python = ">=3.7"
|
||||||
|
summary = "Composable complex class support for attrs and dataclasses."
|
||||||
|
dependencies = [
|
||||||
|
"attrs>=20",
|
||||||
|
"exceptiongroup; python_version < \"3.11\"",
|
||||||
|
"typing-extensions; python_version < \"3.8\"",
|
||||||
|
]
|
||||||
|
files = [
|
||||||
|
{file = "cattrs-22.2.0-py3-none-any.whl", hash = "sha256:bc12b1f0d000b9f9bee83335887d532a1d3e99a833d1bf0882151c97d3e68c21"},
|
||||||
|
{file = "cattrs-22.2.0.tar.gz", hash = "sha256:f0eed5642399423cf656e7b66ce92cdc5b963ecafd041d1b24d136fdde7acf6d"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "click"
|
||||||
|
version = "8.1.3"
|
||||||
|
requires_python = ">=3.7"
|
||||||
|
summary = "Composable command line interface toolkit"
|
||||||
|
dependencies = [
|
||||||
|
"colorama; platform_system == \"Windows\"",
|
||||||
|
"importlib-metadata; python_version < \"3.8\"",
|
||||||
|
]
|
||||||
|
files = [
|
||||||
|
{file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"},
|
||||||
|
{file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "cmakelang"
|
||||||
|
version = "0.6.13"
|
||||||
|
summary = "Language tools for cmake (format, lint, etc)"
|
||||||
|
dependencies = [
|
||||||
|
"six>=1.13.0",
|
||||||
|
]
|
||||||
|
files = [
|
||||||
|
{file = "cmakelang-0.6.13-py3-none-any.whl", hash = "sha256:764b9467195c7c36453d60a829f30229720d26c7dffd41cb516b99bd9c7daf4e"},
|
||||||
|
{file = "cmakelang-0.6.13.tar.gz", hash = "sha256:03982e87b00654d024d73ef972d9d9bb0e5726cdb6b8a424a15661fb6278e67f"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "colorama"
|
||||||
|
version = "0.4.6"
|
||||||
|
requires_python = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
|
||||||
|
summary = "Cross-platform colored terminal text."
|
||||||
|
files = [
|
||||||
|
{file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"},
|
||||||
|
{file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "coverage"
|
||||||
|
version = "7.0.4"
|
||||||
|
requires_python = ">=3.7"
|
||||||
|
summary = "Code coverage measurement for Python"
|
||||||
|
files = [
|
||||||
|
{file = "coverage-7.0.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:daf91db39324e9939a9db919ee4fb42a1a23634a056616dae891a030e89f87ba"},
|
||||||
|
{file = "coverage-7.0.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:55121fe140d7e42cb970999b93cf1c2b24484ce028b32bbd00238bb25c13e34a"},
|
||||||
|
{file = "coverage-7.0.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c027fbb83a8c78a6e06a0302ea1799fdb70e5cda9845a5e000545b8e2b47ea39"},
|
||||||
|
{file = "coverage-7.0.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:caf82db5b7f16b51ec32fe0bd2da0805b177c807aa8bfb478c7e6f893418c284"},
|
||||||
|
{file = "coverage-7.0.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ba5cc54baf3c322c4388de2a43cc95f7809366f0600e743e5aae8ea9d1038b2"},
|
||||||
|
{file = "coverage-7.0.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:260854160083f8275a9d9d49a05ab0ffc7a1f08f2ccccbfaec94a18aae9f407c"},
|
||||||
|
{file = "coverage-7.0.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ea45f0dba5a993e93b158f1a9dcfff2770e3bcabf2b80dbe7aa15dce0bcb3bf3"},
|
||||||
|
{file = "coverage-7.0.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6abc91f6f8b3cc0ae1034e2c03f38769fba1952ab70d0b26953aa01691265c39"},
|
||||||
|
{file = "coverage-7.0.4-cp310-cp310-win32.whl", hash = "sha256:053cdc47cae08257051d7e934a0de4d095b60eb8a3024fa9f1b2322fa1547137"},
|
||||||
|
{file = "coverage-7.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:1e9e94f2612ee549a4b3ee79cbc61bceed77e69cf38cfa05858bae939a886d16"},
|
||||||
|
{file = "coverage-7.0.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5caa9dd91dcc5f054350dc57a02e053d79633907b9ccffff999568d13dcd19f8"},
|
||||||
|
{file = "coverage-7.0.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:efc200fa75d9634525b40babc7a16342bd21c101db1a58ef84dc14f4bf6ac0fd"},
|
||||||
|
{file = "coverage-7.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1791e5f74c5b52f76e83fe9f4bb9571cf76d40ee0c51952ee1e4ee935b7e98b9"},
|
||||||
|
{file = "coverage-7.0.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3d9201cfa5a98652b9cef36ab202f17fe3ea83f497b4ba2a8ed39399dfb8fcd4"},
|
||||||
|
{file = "coverage-7.0.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22d8ef6865cb6834cab2b72fff20747a55c714b57b675f7e11c9624fe4f7cb45"},
|
||||||
|
{file = "coverage-7.0.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b84076e3de192fba0f95e279ac017b64c7c6ecd4f09f36f13420f5bed898a9c7"},
|
||||||
|
{file = "coverage-7.0.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:dcfbf8ffc046f20d75fd775a92c378f6fc7b9bded6c6f2ab88b6b9cb5805a184"},
|
||||||
|
{file = "coverage-7.0.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4665a714af31f160403c2e448fb2fef330719d2e04e836b08d60d612707c1041"},
|
||||||
|
{file = "coverage-7.0.4-cp311-cp311-win32.whl", hash = "sha256:2e59aef3fba5758059208c9eff10ae7ded3629e797972746ec33b56844f69411"},
|
||||||
|
{file = "coverage-7.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:2b854f7985b48122b6fe346631e86d67b63293f8255cb59a93d79e3d9f1574e3"},
|
||||||
|
{file = "coverage-7.0.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e44b60b0b49aa85d548d392a2dca2c6a581cd4084e72e9e16bd58bd86ec20816"},
|
||||||
|
{file = "coverage-7.0.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2904d7a0388911c61e7e3beefe48c29dfccaba938fc1158f63190101a21e04c2"},
|
||||||
|
{file = "coverage-7.0.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bc74b64bfa89e2f862ea45dd6ac1def371d7cc883b76680d20bdd61a6f3daa20"},
|
||||||
|
{file = "coverage-7.0.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c06046f54e719da21c79f98ecc0962581d1aee0b3798dc6b12b1217da8bf93f4"},
|
||||||
|
{file = "coverage-7.0.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:bc9c77004970a364a1e5454cf7cb884e4277592b959c287689b2a0fd027ef552"},
|
||||||
|
{file = "coverage-7.0.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:0815a09b32384e8ff00a5939ec9cd10efce8742347e019c2daca1a32f5ac2aae"},
|
||||||
|
{file = "coverage-7.0.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:a78a80d131c067d67d8a6f9bd3d3f7ea7eac82c1c7259f97d7ab73f723da9d55"},
|
||||||
|
{file = "coverage-7.0.4-cp37-cp37m-win32.whl", hash = "sha256:2b5936b624fbe711ed02dfd86edd678822e5ee68da02b6d231e5c01090b64590"},
|
||||||
|
{file = "coverage-7.0.4-cp37-cp37m-win_amd64.whl", hash = "sha256:a63922765ee49d5b4c32afb2cd5516812c8665f3b78e64a0dd005bdfabf991b1"},
|
||||||
|
{file = "coverage-7.0.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d68f2f7bddb3acdd3b36ef7f334b9d14f30b93e094f808fbbd8d288b8f9e2f9b"},
|
||||||
|
{file = "coverage-7.0.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9dafdba3b2b9010abab08cb8c0dc6549bfca6e1630fe14d47b01dca00d39e694"},
|
||||||
|
{file = "coverage-7.0.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0322354757b47640535daabd2d56384ff3cad2896248fc84d328c5fad4922d5c"},
|
||||||
|
{file = "coverage-7.0.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4e8267466662aff93d66fa72b9591d02122dfc8a729b0a43dd70e0fb07ed9b37"},
|
||||||
|
{file = "coverage-7.0.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f684d88eb4924ed0630cf488fd5606e334c6835594bb5fe36b50a509b10383ed"},
|
||||||
|
{file = "coverage-7.0.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:70c294bb15ba576fb96b580db35895bf03749d683df044212b74e938a7f6821f"},
|
||||||
|
{file = "coverage-7.0.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:34c0457e1ba450ae8b22dc8ea2fd36ada1010af61291e4c96963cd9d9633366f"},
|
||||||
|
{file = "coverage-7.0.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b75aff2c35ceaa299691e772f7bf7c8aeab25f46acea2be3dd04cccb914a9860"},
|
||||||
|
{file = "coverage-7.0.4-cp38-cp38-win32.whl", hash = "sha256:6c5554d55668381e131577f20e8f620d4882b04ad558f7e7f3f1f55b3124c379"},
|
||||||
|
{file = "coverage-7.0.4-cp38-cp38-win_amd64.whl", hash = "sha256:c82f34fafaf5bc05d222fcf84423d6e156432ca35ca78672d4affd0c09c6ef6c"},
|
||||||
|
{file = "coverage-7.0.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b8dfb5fed540f77e814bf4ec79619c241af6b4578fa1093c5e3389bbb7beab3f"},
|
||||||
|
{file = "coverage-7.0.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ee32a080bab779b71c4d09a3eb5254bfca43ee88828a683dab27dfe8f582516e"},
|
||||||
|
{file = "coverage-7.0.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2dfbee0bf0d633be3a2ab068f5a5731a70adf147d0ba17d9f9932b46c7c5782b"},
|
||||||
|
{file = "coverage-7.0.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:32dc010713455ac0fe2fddb0e48aa43875cc7eb7b09768df10bad8ce45f9c430"},
|
||||||
|
{file = "coverage-7.0.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9cb88a3019ad042eaa69fc7639ef077793fedbf313e89207aa82fefe92c97ebd"},
|
||||||
|
{file = "coverage-7.0.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:73bc6114aab7753ca784f87bcd3b7613bc797aa255b5bca45e5654070ae9acfb"},
|
||||||
|
{file = "coverage-7.0.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:92f135d370fcd7a6fb9659fa2eb716dd2ca364719cbb1756f74d90a221bca1a7"},
|
||||||
|
{file = "coverage-7.0.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f3d485e6ec6e09857bf2115ece572d666b7c498377d4c70e66bb06c63ed177c2"},
|
||||||
|
{file = "coverage-7.0.4-cp39-cp39-win32.whl", hash = "sha256:c58921fcd9914b56444292e7546fe183d079db99528142c809549ddeaeacd8e9"},
|
||||||
|
{file = "coverage-7.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:f092d9f2ddaa30235d33335fbdb61eb8f3657af519ef5f9dd6bdae65272def11"},
|
||||||
|
{file = "coverage-7.0.4-pp37.pp38.pp39-none-any.whl", hash = "sha256:cb8cfa3bf3a9f18211279458917fef5edeb5e1fdebe2ea8b11969ec2ebe48884"},
|
||||||
|
{file = "coverage-7.0.4.tar.gz", hash = "sha256:f6c4ad409a0caf7e2e12e203348b1a9b19c514e7d078520973147bf2d3dcbc6f"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "coverage"
|
||||||
|
version = "7.0.4"
|
||||||
|
extras = ["toml"]
|
||||||
|
requires_python = ">=3.7"
|
||||||
|
summary = "Code coverage measurement for Python"
|
||||||
|
dependencies = [
|
||||||
|
"coverage==7.0.4",
|
||||||
|
"tomli; python_full_version <= \"3.11.0a6\"",
|
||||||
|
]
|
||||||
|
files = [
|
||||||
|
{file = "coverage-7.0.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:daf91db39324e9939a9db919ee4fb42a1a23634a056616dae891a030e89f87ba"},
|
||||||
|
{file = "coverage-7.0.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:55121fe140d7e42cb970999b93cf1c2b24484ce028b32bbd00238bb25c13e34a"},
|
||||||
|
{file = "coverage-7.0.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c027fbb83a8c78a6e06a0302ea1799fdb70e5cda9845a5e000545b8e2b47ea39"},
|
||||||
|
{file = "coverage-7.0.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:caf82db5b7f16b51ec32fe0bd2da0805b177c807aa8bfb478c7e6f893418c284"},
|
||||||
|
{file = "coverage-7.0.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ba5cc54baf3c322c4388de2a43cc95f7809366f0600e743e5aae8ea9d1038b2"},
|
||||||
|
{file = "coverage-7.0.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:260854160083f8275a9d9d49a05ab0ffc7a1f08f2ccccbfaec94a18aae9f407c"},
|
||||||
|
{file = "coverage-7.0.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ea45f0dba5a993e93b158f1a9dcfff2770e3bcabf2b80dbe7aa15dce0bcb3bf3"},
|
||||||
|
{file = "coverage-7.0.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6abc91f6f8b3cc0ae1034e2c03f38769fba1952ab70d0b26953aa01691265c39"},
|
||||||
|
{file = "coverage-7.0.4-cp310-cp310-win32.whl", hash = "sha256:053cdc47cae08257051d7e934a0de4d095b60eb8a3024fa9f1b2322fa1547137"},
|
||||||
|
{file = "coverage-7.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:1e9e94f2612ee549a4b3ee79cbc61bceed77e69cf38cfa05858bae939a886d16"},
|
||||||
|
{file = "coverage-7.0.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5caa9dd91dcc5f054350dc57a02e053d79633907b9ccffff999568d13dcd19f8"},
|
||||||
|
{file = "coverage-7.0.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:efc200fa75d9634525b40babc7a16342bd21c101db1a58ef84dc14f4bf6ac0fd"},
|
||||||
|
{file = "coverage-7.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1791e5f74c5b52f76e83fe9f4bb9571cf76d40ee0c51952ee1e4ee935b7e98b9"},
|
||||||
|
{file = "coverage-7.0.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3d9201cfa5a98652b9cef36ab202f17fe3ea83f497b4ba2a8ed39399dfb8fcd4"},
|
||||||
|
{file = "coverage-7.0.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22d8ef6865cb6834cab2b72fff20747a55c714b57b675f7e11c9624fe4f7cb45"},
|
||||||
|
{file = "coverage-7.0.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b84076e3de192fba0f95e279ac017b64c7c6ecd4f09f36f13420f5bed898a9c7"},
|
||||||
|
{file = "coverage-7.0.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:dcfbf8ffc046f20d75fd775a92c378f6fc7b9bded6c6f2ab88b6b9cb5805a184"},
|
||||||
|
{file = "coverage-7.0.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4665a714af31f160403c2e448fb2fef330719d2e04e836b08d60d612707c1041"},
|
||||||
|
{file = "coverage-7.0.4-cp311-cp311-win32.whl", hash = "sha256:2e59aef3fba5758059208c9eff10ae7ded3629e797972746ec33b56844f69411"},
|
||||||
|
{file = "coverage-7.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:2b854f7985b48122b6fe346631e86d67b63293f8255cb59a93d79e3d9f1574e3"},
|
||||||
|
{file = "coverage-7.0.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e44b60b0b49aa85d548d392a2dca2c6a581cd4084e72e9e16bd58bd86ec20816"},
|
||||||
|
{file = "coverage-7.0.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2904d7a0388911c61e7e3beefe48c29dfccaba938fc1158f63190101a21e04c2"},
|
||||||
|
{file = "coverage-7.0.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bc74b64bfa89e2f862ea45dd6ac1def371d7cc883b76680d20bdd61a6f3daa20"},
|
||||||
|
{file = "coverage-7.0.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c06046f54e719da21c79f98ecc0962581d1aee0b3798dc6b12b1217da8bf93f4"},
|
||||||
|
{file = "coverage-7.0.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:bc9c77004970a364a1e5454cf7cb884e4277592b959c287689b2a0fd027ef552"},
|
||||||
|
{file = "coverage-7.0.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:0815a09b32384e8ff00a5939ec9cd10efce8742347e019c2daca1a32f5ac2aae"},
|
||||||
|
{file = "coverage-7.0.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:a78a80d131c067d67d8a6f9bd3d3f7ea7eac82c1c7259f97d7ab73f723da9d55"},
|
||||||
|
{file = "coverage-7.0.4-cp37-cp37m-win32.whl", hash = "sha256:2b5936b624fbe711ed02dfd86edd678822e5ee68da02b6d231e5c01090b64590"},
|
||||||
|
{file = "coverage-7.0.4-cp37-cp37m-win_amd64.whl", hash = "sha256:a63922765ee49d5b4c32afb2cd5516812c8665f3b78e64a0dd005bdfabf991b1"},
|
||||||
|
{file = "coverage-7.0.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d68f2f7bddb3acdd3b36ef7f334b9d14f30b93e094f808fbbd8d288b8f9e2f9b"},
|
||||||
|
{file = "coverage-7.0.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9dafdba3b2b9010abab08cb8c0dc6549bfca6e1630fe14d47b01dca00d39e694"},
|
||||||
|
{file = "coverage-7.0.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0322354757b47640535daabd2d56384ff3cad2896248fc84d328c5fad4922d5c"},
|
||||||
|
{file = "coverage-7.0.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4e8267466662aff93d66fa72b9591d02122dfc8a729b0a43dd70e0fb07ed9b37"},
|
||||||
|
{file = "coverage-7.0.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f684d88eb4924ed0630cf488fd5606e334c6835594bb5fe36b50a509b10383ed"},
|
||||||
|
{file = "coverage-7.0.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:70c294bb15ba576fb96b580db35895bf03749d683df044212b74e938a7f6821f"},
|
||||||
|
{file = "coverage-7.0.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:34c0457e1ba450ae8b22dc8ea2fd36ada1010af61291e4c96963cd9d9633366f"},
|
||||||
|
{file = "coverage-7.0.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b75aff2c35ceaa299691e772f7bf7c8aeab25f46acea2be3dd04cccb914a9860"},
|
||||||
|
{file = "coverage-7.0.4-cp38-cp38-win32.whl", hash = "sha256:6c5554d55668381e131577f20e8f620d4882b04ad558f7e7f3f1f55b3124c379"},
|
||||||
|
{file = "coverage-7.0.4-cp38-cp38-win_amd64.whl", hash = "sha256:c82f34fafaf5bc05d222fcf84423d6e156432ca35ca78672d4affd0c09c6ef6c"},
|
||||||
|
{file = "coverage-7.0.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b8dfb5fed540f77e814bf4ec79619c241af6b4578fa1093c5e3389bbb7beab3f"},
|
||||||
|
{file = "coverage-7.0.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ee32a080bab779b71c4d09a3eb5254bfca43ee88828a683dab27dfe8f582516e"},
|
||||||
|
{file = "coverage-7.0.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2dfbee0bf0d633be3a2ab068f5a5731a70adf147d0ba17d9f9932b46c7c5782b"},
|
||||||
|
{file = "coverage-7.0.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:32dc010713455ac0fe2fddb0e48aa43875cc7eb7b09768df10bad8ce45f9c430"},
|
||||||
|
{file = "coverage-7.0.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9cb88a3019ad042eaa69fc7639ef077793fedbf313e89207aa82fefe92c97ebd"},
|
||||||
|
{file = "coverage-7.0.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:73bc6114aab7753ca784f87bcd3b7613bc797aa255b5bca45e5654070ae9acfb"},
|
||||||
|
{file = "coverage-7.0.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:92f135d370fcd7a6fb9659fa2eb716dd2ca364719cbb1756f74d90a221bca1a7"},
|
||||||
|
{file = "coverage-7.0.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f3d485e6ec6e09857bf2115ece572d666b7c498377d4c70e66bb06c63ed177c2"},
|
||||||
|
{file = "coverage-7.0.4-cp39-cp39-win32.whl", hash = "sha256:c58921fcd9914b56444292e7546fe183d079db99528142c809549ddeaeacd8e9"},
|
||||||
|
{file = "coverage-7.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:f092d9f2ddaa30235d33335fbdb61eb8f3657af519ef5f9dd6bdae65272def11"},
|
||||||
|
{file = "coverage-7.0.4-pp37.pp38.pp39-none-any.whl", hash = "sha256:cb8cfa3bf3a9f18211279458917fef5edeb5e1fdebe2ea8b11969ec2ebe48884"},
|
||||||
|
{file = "coverage-7.0.4.tar.gz", hash = "sha256:f6c4ad409a0caf7e2e12e203348b1a9b19c514e7d078520973147bf2d3dcbc6f"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "exceptiongroup"
|
||||||
|
version = "1.1.0"
|
||||||
|
requires_python = ">=3.7"
|
||||||
|
summary = "Backport of PEP 654 (exception groups)"
|
||||||
|
files = [
|
||||||
|
{file = "exceptiongroup-1.1.0-py3-none-any.whl", hash = "sha256:327cbda3da756e2de031a3107b81ab7b3770a602c4d16ca618298c526f4bec1e"},
|
||||||
|
{file = "exceptiongroup-1.1.0.tar.gz", hash = "sha256:bcb67d800a4497e1b404c2dd44fca47d3b7a5e5433dbab67f96c1a685cdfdf23"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "flake8"
|
||||||
|
version = "5.0.4"
|
||||||
|
requires_python = ">=3.6.1"
|
||||||
|
summary = "the modular source code checker: pep8 pyflakes and co"
|
||||||
|
dependencies = [
|
||||||
|
"importlib-metadata<4.3,>=1.1.0; python_version < \"3.8\"",
|
||||||
|
"mccabe<0.8.0,>=0.7.0",
|
||||||
|
"pycodestyle<2.10.0,>=2.9.0",
|
||||||
|
"pyflakes<2.6.0,>=2.5.0",
|
||||||
|
]
|
||||||
|
files = [
|
||||||
|
{file = "flake8-5.0.4-py2.py3-none-any.whl", hash = "sha256:7a1cf6b73744f5806ab95e526f6f0d8c01c66d7bbe349562d22dfca20610b248"},
|
||||||
|
{file = "flake8-5.0.4.tar.gz", hash = "sha256:6fbe320aad8d6b95cec8b8e47bc933004678dc63095be98528b7bdd2a9f510db"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "importlib-metadata"
|
||||||
|
version = "4.2.0"
|
||||||
|
requires_python = ">=3.6"
|
||||||
|
summary = "Read metadata from Python packages"
|
||||||
|
dependencies = [
|
||||||
|
"typing-extensions>=3.6.4; python_version < \"3.8\"",
|
||||||
|
"zipp>=0.5",
|
||||||
|
]
|
||||||
|
files = [
|
||||||
|
{file = "importlib_metadata-4.2.0-py3-none-any.whl", hash = "sha256:057e92c15bc8d9e8109738a48db0ccb31b4d9d5cfbee5a8670879a30be66304b"},
|
||||||
|
{file = "importlib_metadata-4.2.0.tar.gz", hash = "sha256:b7e52a1f8dec14a75ea73e0891f3060099ca1d8e6a462a4dff11c3e119ea1b31"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "iniconfig"
|
||||||
|
version = "2.0.0"
|
||||||
|
requires_python = ">=3.7"
|
||||||
|
summary = "brain-dead simple config-ini parsing"
|
||||||
|
files = [
|
||||||
|
{file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"},
|
||||||
|
{file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "isort"
|
||||||
|
version = "5.11.4"
|
||||||
|
requires_python = ">=3.7.0"
|
||||||
|
summary = "A Python utility / library to sort Python imports."
|
||||||
|
files = [
|
||||||
|
{file = "isort-5.11.4-py3-none-any.whl", hash = "sha256:c033fd0edb91000a7f09527fe5c75321878f98322a77ddcc81adbd83724afb7b"},
|
||||||
|
{file = "isort-5.11.4.tar.gz", hash = "sha256:6db30c5ded9815d813932c04c2f85a360bcdd35fed496f4d8f35495ef0a261b6"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "lsprotocol"
|
||||||
|
version = "2023.0.0b1"
|
||||||
|
requires_python = ">=3.7"
|
||||||
|
summary = "Python implementation of the Language Server Protocol."
|
||||||
|
dependencies = [
|
||||||
|
"attrs>=21.3.0",
|
||||||
|
"cattrs",
|
||||||
|
]
|
||||||
|
files = [
|
||||||
|
{file = "lsprotocol-2023.0.0b1-py3-none-any.whl", hash = "sha256:ade2cd0fa0ede7965698cb59cd05d3adbd19178fd73e83f72ef57a032fbb9d62"},
|
||||||
|
{file = "lsprotocol-2023.0.0b1.tar.gz", hash = "sha256:f7a2d4655cbd5639f373ddd1789807450c543341fa0a32b064ad30dbb9f510d4"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "mccabe"
|
||||||
|
version = "0.7.0"
|
||||||
|
requires_python = ">=3.6"
|
||||||
|
summary = "McCabe checker, plugin for flake8"
|
||||||
|
files = [
|
||||||
|
{file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"},
|
||||||
|
{file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "mypy"
|
||||||
|
version = "0.991"
|
||||||
|
requires_python = ">=3.7"
|
||||||
|
summary = "Optional static typing for Python"
|
||||||
|
dependencies = [
|
||||||
|
"mypy-extensions>=0.4.3",
|
||||||
|
"tomli>=1.1.0; python_version < \"3.11\"",
|
||||||
|
"typed-ast<2,>=1.4.0; python_version < \"3.8\"",
|
||||||
|
"typing-extensions>=3.10",
|
||||||
|
]
|
||||||
|
files = [
|
||||||
|
{file = "mypy-0.991-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7d17e0a9707d0772f4a7b878f04b4fd11f6f5bcb9b3813975a9b13c9332153ab"},
|
||||||
|
{file = "mypy-0.991-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0714258640194d75677e86c786e80ccf294972cc76885d3ebbb560f11db0003d"},
|
||||||
|
{file = "mypy-0.991-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0c8f3be99e8a8bd403caa8c03be619544bc2c77a7093685dcf308c6b109426c6"},
|
||||||
|
{file = "mypy-0.991-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc9ec663ed6c8f15f4ae9d3c04c989b744436c16d26580eaa760ae9dd5d662eb"},
|
||||||
|
{file = "mypy-0.991-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4307270436fd7694b41f913eb09210faff27ea4979ecbcd849e57d2da2f65305"},
|
||||||
|
{file = "mypy-0.991-cp310-cp310-win_amd64.whl", hash = "sha256:901c2c269c616e6cb0998b33d4adbb4a6af0ac4ce5cd078afd7bc95830e62c1c"},
|
||||||
|
{file = "mypy-0.991-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d13674f3fb73805ba0c45eb6c0c3053d218aa1f7abead6e446d474529aafc372"},
|
||||||
|
{file = "mypy-0.991-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1c8cd4fb70e8584ca1ed5805cbc7c017a3d1a29fb450621089ffed3e99d1857f"},
|
||||||
|
{file = "mypy-0.991-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:209ee89fbb0deed518605edddd234af80506aec932ad28d73c08f1400ef80a33"},
|
||||||
|
{file = "mypy-0.991-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37bd02ebf9d10e05b00d71302d2c2e6ca333e6c2a8584a98c00e038db8121f05"},
|
||||||
|
{file = "mypy-0.991-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:26efb2fcc6b67e4d5a55561f39176821d2adf88f2745ddc72751b7890f3194ad"},
|
||||||
|
{file = "mypy-0.991-cp311-cp311-win_amd64.whl", hash = "sha256:3a700330b567114b673cf8ee7388e949f843b356a73b5ab22dd7cff4742a5297"},
|
||||||
|
{file = "mypy-0.991-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:1f7d1a520373e2272b10796c3ff721ea1a0712288cafaa95931e66aa15798813"},
|
||||||
|
{file = "mypy-0.991-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:641411733b127c3e0dab94c45af15fea99e4468f99ac88b39efb1ad677da5711"},
|
||||||
|
{file = "mypy-0.991-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:3d80e36b7d7a9259b740be6d8d906221789b0d836201af4234093cae89ced0cd"},
|
||||||
|
{file = "mypy-0.991-cp37-cp37m-win_amd64.whl", hash = "sha256:e62ebaad93be3ad1a828a11e90f0e76f15449371ffeecca4a0a0b9adc99abcef"},
|
||||||
|
{file = "mypy-0.991-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b86ce2c1866a748c0f6faca5232059f881cda6dda2a893b9a8373353cfe3715a"},
|
||||||
|
{file = "mypy-0.991-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ac6e503823143464538efda0e8e356d871557ef60ccd38f8824a4257acc18d93"},
|
||||||
|
{file = "mypy-0.991-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0cca5adf694af539aeaa6ac633a7afe9bbd760df9d31be55ab780b77ab5ae8bf"},
|
||||||
|
{file = "mypy-0.991-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a12c56bf73cdab116df96e4ff39610b92a348cc99a1307e1da3c3768bbb5b135"},
|
||||||
|
{file = "mypy-0.991-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:652b651d42f155033a1967739788c436491b577b6a44e4c39fb340d0ee7f0d70"},
|
||||||
|
{file = "mypy-0.991-cp38-cp38-win_amd64.whl", hash = "sha256:4175593dc25d9da12f7de8de873a33f9b2b8bdb4e827a7cae952e5b1a342e243"},
|
||||||
|
{file = "mypy-0.991-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:98e781cd35c0acf33eb0295e8b9c55cdbef64fcb35f6d3aa2186f289bed6e80d"},
|
||||||
|
{file = "mypy-0.991-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6d7464bac72a85cb3491c7e92b5b62f3dcccb8af26826257760a552a5e244aa5"},
|
||||||
|
{file = "mypy-0.991-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c9166b3f81a10cdf9b49f2d594b21b31adadb3d5e9db9b834866c3258b695be3"},
|
||||||
|
{file = "mypy-0.991-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8472f736a5bfb159a5e36740847808f6f5b659960115ff29c7cecec1741c648"},
|
||||||
|
{file = "mypy-0.991-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5e80e758243b97b618cdf22004beb09e8a2de1af481382e4d84bc52152d1c476"},
|
||||||
|
{file = "mypy-0.991-cp39-cp39-win_amd64.whl", hash = "sha256:74e259b5c19f70d35fcc1ad3d56499065c601dfe94ff67ae48b85596b9ec1461"},
|
||||||
|
{file = "mypy-0.991-py3-none-any.whl", hash = "sha256:de32edc9b0a7e67c2775e574cb061a537660e51210fbf6006b0b36ea695ae9bb"},
|
||||||
|
{file = "mypy-0.991.tar.gz", hash = "sha256:3c0165ba8f354a6d9881809ef29f1a9318a236a6d81c690094c5df32107bde06"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "mypy-extensions"
|
||||||
|
version = "0.4.3"
|
||||||
|
summary = "Experimental type system extensions for programs checked with the mypy typechecker."
|
||||||
|
files = [
|
||||||
|
{file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"},
|
||||||
|
{file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "packaging"
|
||||||
|
version = "22.0"
|
||||||
|
requires_python = ">=3.7"
|
||||||
|
summary = "Core utilities for Python packages"
|
||||||
|
files = [
|
||||||
|
{file = "packaging-22.0-py3-none-any.whl", hash = "sha256:957e2148ba0e1a3b282772e791ef1d8083648bc131c8ab0c1feba110ce1146c3"},
|
||||||
|
{file = "packaging-22.0.tar.gz", hash = "sha256:2198ec20bd4c017b8f9717e00f0c8714076fc2fd93816750ab48e2c41de2cfd3"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pathspec"
|
||||||
|
version = "0.10.3"
|
||||||
|
requires_python = ">=3.7"
|
||||||
|
summary = "Utility library for gitignore style pattern matching of file paths."
|
||||||
|
files = [
|
||||||
|
{file = "pathspec-0.10.3-py3-none-any.whl", hash = "sha256:3c95343af8b756205e2aba76e843ba9520a24dd84f68c22b9f93251507509dd6"},
|
||||||
|
{file = "pathspec-0.10.3.tar.gz", hash = "sha256:56200de4077d9d0791465aa9095a01d421861e405b5096955051deefd697d6f6"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "platformdirs"
|
||||||
|
version = "2.6.2"
|
||||||
|
requires_python = ">=3.7"
|
||||||
|
summary = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
|
||||||
|
dependencies = [
|
||||||
|
"typing-extensions>=4.4; python_version < \"3.8\"",
|
||||||
|
]
|
||||||
|
files = [
|
||||||
|
{file = "platformdirs-2.6.2-py3-none-any.whl", hash = "sha256:83c8f6d04389165de7c9b6f0c682439697887bca0aa2f1c87ef1826be3584490"},
|
||||||
|
{file = "platformdirs-2.6.2.tar.gz", hash = "sha256:e1fea1fe471b9ff8332e229df3cb7de4f53eeea4998d3b6bfff542115e998bd2"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pluggy"
|
||||||
|
version = "1.0.0"
|
||||||
|
requires_python = ">=3.6"
|
||||||
|
summary = "plugin and hook calling mechanisms for python"
|
||||||
|
dependencies = [
|
||||||
|
"importlib-metadata>=0.12; python_version < \"3.8\"",
|
||||||
|
]
|
||||||
|
files = [
|
||||||
|
{file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"},
|
||||||
|
{file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pycodestyle"
|
||||||
|
version = "2.9.1"
|
||||||
|
requires_python = ">=3.6"
|
||||||
|
summary = "Python style guide checker"
|
||||||
|
files = [
|
||||||
|
{file = "pycodestyle-2.9.1-py2.py3-none-any.whl", hash = "sha256:d1735fc58b418fd7c5f658d28d943854f8a849b01a5d0a1e6f3f3fdd0166804b"},
|
||||||
|
{file = "pycodestyle-2.9.1.tar.gz", hash = "sha256:2c9607871d58c76354b697b42f5d57e1ada7d261c261efac224b664affdc5785"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pyflakes"
|
||||||
|
version = "2.5.0"
|
||||||
|
requires_python = ">=3.6"
|
||||||
|
summary = "passive checker of Python programs"
|
||||||
|
files = [
|
||||||
|
{file = "pyflakes-2.5.0-py2.py3-none-any.whl", hash = "sha256:4579f67d887f804e67edb544428f264b7b24f435b263c4614f384135cea553d2"},
|
||||||
|
{file = "pyflakes-2.5.0.tar.gz", hash = "sha256:491feb020dca48ccc562a8c0cbe8df07ee13078df59813b83959cbdada312ea3"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pygls"
|
||||||
|
version = "1.1.1"
|
||||||
|
requires_python = ">=3.7.9,<4"
|
||||||
|
summary = "A pythonic generic language server (pronounced like 'pie glass')"
|
||||||
|
dependencies = [
|
||||||
|
"lsprotocol==2023.0.0b1",
|
||||||
|
"typeguard<4.0.0,>=3.0.0",
|
||||||
|
]
|
||||||
|
files = [
|
||||||
|
{file = "pygls-1.1.1-py3-none-any.whl", hash = "sha256:330704551a335b443bf1cdfb0507f121608591095898d451f0007eeb1510067c"},
|
||||||
|
{file = "pygls-1.1.1.tar.gz", hash = "sha256:b1b4ddd6f800a5573f61f0ec2cd3bc7a859d171f48142b46e1de35a1357c00fe"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pytest"
|
||||||
|
version = "7.2.0"
|
||||||
|
requires_python = ">=3.7"
|
||||||
|
summary = "pytest: simple powerful testing with Python"
|
||||||
|
dependencies = [
|
||||||
|
"attrs>=19.2.0",
|
||||||
|
"colorama; sys_platform == \"win32\"",
|
||||||
|
"exceptiongroup>=1.0.0rc8; python_version < \"3.11\"",
|
||||||
|
"importlib-metadata>=0.12; python_version < \"3.8\"",
|
||||||
|
"iniconfig",
|
||||||
|
"packaging",
|
||||||
|
"pluggy<2.0,>=0.12",
|
||||||
|
"tomli>=1.0.0; python_version < \"3.11\"",
|
||||||
|
]
|
||||||
|
files = [
|
||||||
|
{file = "pytest-7.2.0-py3-none-any.whl", hash = "sha256:892f933d339f068883b6fd5a459f03d85bfcb355e4981e146d2c7616c21fef71"},
|
||||||
|
{file = "pytest-7.2.0.tar.gz", hash = "sha256:c4014eb40e10f11f355ad4e3c2fb2c6c6d1919c73f3b5a433de4708202cade59"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pytest-cov"
|
||||||
|
version = "4.0.0"
|
||||||
|
requires_python = ">=3.6"
|
||||||
|
summary = "Pytest plugin for measuring coverage."
|
||||||
|
dependencies = [
|
||||||
|
"coverage[toml]>=5.2.1",
|
||||||
|
"pytest>=4.6",
|
||||||
|
]
|
||||||
|
files = [
|
||||||
|
{file = "pytest-cov-4.0.0.tar.gz", hash = "sha256:996b79efde6433cdbd0088872dbc5fb3ed7fe1578b68cdbba634f14bb8dd0470"},
|
||||||
|
{file = "pytest_cov-4.0.0-py3-none-any.whl", hash = "sha256:2feb1b751d66a8bd934e5edfa2e961d11309dc37b73b0eabe73b5945fee20f6b"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pytest-datadir"
|
||||||
|
version = "1.4.1"
|
||||||
|
requires_python = ">=3.6"
|
||||||
|
summary = "pytest plugin for test data directories and files"
|
||||||
|
dependencies = [
|
||||||
|
"pytest>=5.0",
|
||||||
|
]
|
||||||
|
files = [
|
||||||
|
{file = "pytest-datadir-1.4.1.tar.gz", hash = "sha256:9f7a3c4def6ac4cac3cc8181139ab53bd2667231052bd40cb07081748d4420f0"},
|
||||||
|
{file = "pytest_datadir-1.4.1-py3-none-any.whl", hash = "sha256:095f441782b1b907587eca7227fdbae94be43f1c96b4b2cbcc6801a4645be1af"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "six"
|
||||||
|
version = "1.16.0"
|
||||||
|
requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
|
||||||
|
summary = "Python 2 and 3 compatibility utilities"
|
||||||
|
files = [
|
||||||
|
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
|
||||||
|
{file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tomli"
|
||||||
|
version = "2.0.1"
|
||||||
|
requires_python = ">=3.7"
|
||||||
|
summary = "A lil' TOML parser"
|
||||||
|
files = [
|
||||||
|
{file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"},
|
||||||
|
{file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "typed-ast"
|
||||||
|
version = "1.5.4"
|
||||||
|
requires_python = ">=3.6"
|
||||||
|
summary = "a fork of Python 2 and 3 ast modules with type comment support"
|
||||||
|
files = [
|
||||||
|
{file = "typed_ast-1.5.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:669dd0c4167f6f2cd9f57041e03c3c2ebf9063d0757dc89f79ba1daa2bfca9d4"},
|
||||||
|
{file = "typed_ast-1.5.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:211260621ab1cd7324e0798d6be953d00b74e0428382991adfddb352252f1d62"},
|
||||||
|
{file = "typed_ast-1.5.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:267e3f78697a6c00c689c03db4876dd1efdfea2f251a5ad6555e82a26847b4ac"},
|
||||||
|
{file = "typed_ast-1.5.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c542eeda69212fa10a7ada75e668876fdec5f856cd3d06829e6aa64ad17c8dfe"},
|
||||||
|
{file = "typed_ast-1.5.4-cp310-cp310-win_amd64.whl", hash = "sha256:a9916d2bb8865f973824fb47436fa45e1ebf2efd920f2b9f99342cb7fab93f72"},
|
||||||
|
{file = "typed_ast-1.5.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:cf4afcfac006ece570e32d6fa90ab74a17245b83dfd6655a6f68568098345ff6"},
|
||||||
|
{file = "typed_ast-1.5.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed855bbe3eb3715fca349c80174cfcfd699c2f9de574d40527b8429acae23a66"},
|
||||||
|
{file = "typed_ast-1.5.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6778e1b2f81dfc7bc58e4b259363b83d2e509a65198e85d5700dfae4c6c8ff1c"},
|
||||||
|
{file = "typed_ast-1.5.4-cp37-cp37m-win_amd64.whl", hash = "sha256:0261195c2062caf107831e92a76764c81227dae162c4f75192c0d489faf751a2"},
|
||||||
|
{file = "typed_ast-1.5.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2efae9db7a8c05ad5547d522e7dbe62c83d838d3906a3716d1478b6c1d61388d"},
|
||||||
|
{file = "typed_ast-1.5.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7d5d014b7daa8b0bf2eaef684295acae12b036d79f54178b92a2b6a56f92278f"},
|
||||||
|
{file = "typed_ast-1.5.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:370788a63915e82fd6f212865a596a0fefcbb7d408bbbb13dea723d971ed8bdc"},
|
||||||
|
{file = "typed_ast-1.5.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4e964b4ff86550a7a7d56345c7864b18f403f5bd7380edf44a3c1fb4ee7ac6c6"},
|
||||||
|
{file = "typed_ast-1.5.4-cp38-cp38-win_amd64.whl", hash = "sha256:683407d92dc953c8a7347119596f0b0e6c55eb98ebebd9b23437501b28dcbb8e"},
|
||||||
|
{file = "typed_ast-1.5.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4879da6c9b73443f97e731b617184a596ac1235fe91f98d279a7af36c796da35"},
|
||||||
|
{file = "typed_ast-1.5.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3e123d878ba170397916557d31c8f589951e353cc95fb7f24f6bb69adc1a8a97"},
|
||||||
|
{file = "typed_ast-1.5.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebd9d7f80ccf7a82ac5f88c521115cc55d84e35bf8b446fcd7836eb6b98929a3"},
|
||||||
|
{file = "typed_ast-1.5.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98f80dee3c03455e92796b58b98ff6ca0b2a6f652120c263efdba4d6c5e58f72"},
|
||||||
|
{file = "typed_ast-1.5.4-cp39-cp39-win_amd64.whl", hash = "sha256:0fdbcf2fef0ca421a3f5912555804296f0b0960f0418c440f5d6d3abb549f3e1"},
|
||||||
|
{file = "typed_ast-1.5.4.tar.gz", hash = "sha256:39e21ceb7388e4bb37f4c679d72707ed46c2fbf2a5609b8b8ebc4b067d977df2"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "typeguard"
|
||||||
|
version = "3.0.2"
|
||||||
|
requires_python = ">=3.7.4"
|
||||||
|
summary = "Run-time type checker for Python"
|
||||||
|
dependencies = [
|
||||||
|
"importlib-metadata>=3.6; python_version < \"3.10\"",
|
||||||
|
"typing-extensions>=4.4.0; python_version < \"3.11\"",
|
||||||
|
]
|
||||||
|
files = [
|
||||||
|
{file = "typeguard-3.0.2-py3-none-any.whl", hash = "sha256:bbe993854385284ab42fd5bd3bee6f6556577ce8b50696d6cb956d704f286c8e"},
|
||||||
|
{file = "typeguard-3.0.2.tar.gz", hash = "sha256:fee5297fdb28f8e9efcb8142b5ee219e02375509cd77ea9d270b5af826358d5a"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "typing-extensions"
|
||||||
|
version = "4.4.0"
|
||||||
|
requires_python = ">=3.7"
|
||||||
|
summary = "Backported and Experimental Type Hints for Python 3.7+"
|
||||||
|
files = [
|
||||||
|
{file = "typing_extensions-4.4.0-py3-none-any.whl", hash = "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e"},
|
||||||
|
{file = "typing_extensions-4.4.0.tar.gz", hash = "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "zipp"
|
||||||
|
version = "3.11.0"
|
||||||
|
requires_python = ">=3.7"
|
||||||
|
summary = "Backport of pathlib-compatible object wrapper for zip files"
|
||||||
|
files = [
|
||||||
|
{file = "zipp-3.11.0-py3-none-any.whl", hash = "sha256:83a28fcb75844b5c0cdaf5aa4003c2d728c77e05f5aeabe8e95e56727005fbaa"},
|
||||||
|
{file = "zipp-3.11.0.tar.gz", hash = "sha256:a7a22e05929290a67401440b39690ae6563279bced5f314609d9d03798f56766"},
|
||||||
|
]
|
||||||
390
poetry.lock
generated
390
poetry.lock
generated
@@ -1,390 +0,0 @@
|
|||||||
[[package]]
|
|
||||||
name = "atomicwrites"
|
|
||||||
version = "1.4.0"
|
|
||||||
description = "Atomic file writes."
|
|
||||||
category = "dev"
|
|
||||||
optional = false
|
|
||||||
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "attrs"
|
|
||||||
version = "21.4.0"
|
|
||||||
description = "Classes Without Boilerplate"
|
|
||||||
category = "dev"
|
|
||||||
optional = false
|
|
||||||
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
|
|
||||||
|
|
||||||
[package.extras]
|
|
||||||
dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"]
|
|
||||||
docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"]
|
|
||||||
tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"]
|
|
||||||
tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "colorama"
|
|
||||||
version = "0.4.4"
|
|
||||||
description = "Cross-platform colored terminal text."
|
|
||||||
category = "dev"
|
|
||||||
optional = false
|
|
||||||
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "coverage"
|
|
||||||
version = "6.2"
|
|
||||||
description = "Code coverage measurement for Python"
|
|
||||||
category = "dev"
|
|
||||||
optional = false
|
|
||||||
python-versions = ">=3.6"
|
|
||||||
|
|
||||||
[package.extras]
|
|
||||||
toml = ["tomli"]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "dataclasses"
|
|
||||||
version = "0.8"
|
|
||||||
description = "A backport of the dataclasses module for Python 3.6"
|
|
||||||
category = "main"
|
|
||||||
optional = false
|
|
||||||
python-versions = ">=3.6, <3.7"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "importlib-metadata"
|
|
||||||
version = "4.8.3"
|
|
||||||
description = "Read metadata from Python packages"
|
|
||||||
category = "main"
|
|
||||||
optional = false
|
|
||||||
python-versions = ">=3.6"
|
|
||||||
|
|
||||||
[package.dependencies]
|
|
||||||
typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
|
|
||||||
zipp = ">=0.5"
|
|
||||||
|
|
||||||
[package.extras]
|
|
||||||
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
|
|
||||||
perf = ["ipython"]
|
|
||||||
testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "iniconfig"
|
|
||||||
version = "1.1.1"
|
|
||||||
description = "iniconfig: brain-dead simple config-ini parsing"
|
|
||||||
category = "dev"
|
|
||||||
optional = false
|
|
||||||
python-versions = "*"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "packaging"
|
|
||||||
version = "21.3"
|
|
||||||
description = "Core utilities for Python packages"
|
|
||||||
category = "dev"
|
|
||||||
optional = false
|
|
||||||
python-versions = ">=3.6"
|
|
||||||
|
|
||||||
[package.dependencies]
|
|
||||||
pyparsing = ">=2.0.2,<3.0.5 || >3.0.5"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "pluggy"
|
|
||||||
version = "1.0.0"
|
|
||||||
description = "plugin and hook calling mechanisms for python"
|
|
||||||
category = "dev"
|
|
||||||
optional = false
|
|
||||||
python-versions = ">=3.6"
|
|
||||||
|
|
||||||
[package.dependencies]
|
|
||||||
importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
|
|
||||||
|
|
||||||
[package.extras]
|
|
||||||
dev = ["pre-commit", "tox"]
|
|
||||||
testing = ["pytest", "pytest-benchmark"]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "py"
|
|
||||||
version = "1.11.0"
|
|
||||||
description = "library with cross-python path, ini-parsing, io, code, log facilities"
|
|
||||||
category = "dev"
|
|
||||||
optional = false
|
|
||||||
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "pydantic"
|
|
||||||
version = "1.7.4"
|
|
||||||
description = "Data validation and settings management using python 3.6 type hinting"
|
|
||||||
category = "main"
|
|
||||||
optional = false
|
|
||||||
python-versions = ">=3.6"
|
|
||||||
|
|
||||||
[package.dependencies]
|
|
||||||
dataclasses = {version = ">=0.6", markers = "python_version < \"3.7\""}
|
|
||||||
|
|
||||||
[package.extras]
|
|
||||||
dotenv = ["python-dotenv (>=0.10.4)"]
|
|
||||||
email = ["email-validator (>=1.0.3)"]
|
|
||||||
typing_extensions = ["typing-extensions (>=3.7.2)"]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "pygls"
|
|
||||||
version = "0.11.3"
|
|
||||||
description = "a pythonic generic language server (pronounced like \"pie glass\")."
|
|
||||||
category = "main"
|
|
||||||
optional = false
|
|
||||||
python-versions = "*"
|
|
||||||
|
|
||||||
[package.dependencies]
|
|
||||||
pydantic = ">=1.7,<1.9"
|
|
||||||
typeguard = ">=2.10.0,<3"
|
|
||||||
|
|
||||||
[package.extras]
|
|
||||||
dev = ["bandit (==1.6.0)", "flake8 (==3.7.7)", "mypy (==0.812)"]
|
|
||||||
docs = ["sphinx (==2.0.1)", "sphinx-rtd-theme (==0.4.3)"]
|
|
||||||
test = ["mock (==3.0.5)", "pytest (==4.5.0)", "pytest-asyncio (==0.10.0)"]
|
|
||||||
ws = ["websockets (>=9.0.0,<10.0.0)"]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "pyparsing"
|
|
||||||
version = "2.4.7"
|
|
||||||
description = "Python parsing module"
|
|
||||||
category = "main"
|
|
||||||
optional = false
|
|
||||||
python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "pytest"
|
|
||||||
version = "6.2.5"
|
|
||||||
description = "pytest: simple powerful testing with Python"
|
|
||||||
category = "dev"
|
|
||||||
optional = false
|
|
||||||
python-versions = ">=3.6"
|
|
||||||
|
|
||||||
[package.dependencies]
|
|
||||||
atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""}
|
|
||||||
attrs = ">=19.2.0"
|
|
||||||
colorama = {version = "*", markers = "sys_platform == \"win32\""}
|
|
||||||
importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
|
|
||||||
iniconfig = "*"
|
|
||||||
packaging = "*"
|
|
||||||
pluggy = ">=0.12,<2.0"
|
|
||||||
py = ">=1.8.2"
|
|
||||||
toml = "*"
|
|
||||||
|
|
||||||
[package.extras]
|
|
||||||
testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "pytest-cov"
|
|
||||||
version = "2.12.1"
|
|
||||||
description = "Pytest plugin for measuring coverage."
|
|
||||||
category = "dev"
|
|
||||||
optional = false
|
|
||||||
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
|
|
||||||
|
|
||||||
[package.dependencies]
|
|
||||||
coverage = ">=5.2.1"
|
|
||||||
pytest = ">=4.6"
|
|
||||||
toml = "*"
|
|
||||||
|
|
||||||
[package.extras]
|
|
||||||
testing = ["fields", "hunter", "process-tests", "six", "pytest-xdist", "virtualenv"]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "pytest-datadir"
|
|
||||||
version = "1.3.1"
|
|
||||||
description = "pytest plugin for test data directories and files"
|
|
||||||
category = "dev"
|
|
||||||
optional = false
|
|
||||||
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
|
|
||||||
|
|
||||||
[package.dependencies]
|
|
||||||
pytest = ">=2.7.0"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "toml"
|
|
||||||
version = "0.10.2"
|
|
||||||
description = "Python Library for Tom's Obvious, Minimal Language"
|
|
||||||
category = "dev"
|
|
||||||
optional = false
|
|
||||||
python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "typeguard"
|
|
||||||
version = "2.13.3"
|
|
||||||
description = "Run-time type checker for Python"
|
|
||||||
category = "main"
|
|
||||||
optional = false
|
|
||||||
python-versions = ">=3.5.3"
|
|
||||||
|
|
||||||
[package.extras]
|
|
||||||
doc = ["sphinx-rtd-theme", "sphinx-autodoc-typehints (>=1.2.0)"]
|
|
||||||
test = ["pytest", "typing-extensions", "mypy"]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "typing-extensions"
|
|
||||||
version = "4.1.1"
|
|
||||||
description = "Backported and Experimental Type Hints for Python 3.6+"
|
|
||||||
category = "main"
|
|
||||||
optional = false
|
|
||||||
python-versions = ">=3.6"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "zipp"
|
|
||||||
version = "3.6.0"
|
|
||||||
description = "Backport of pathlib-compatible object wrapper for zip files"
|
|
||||||
category = "main"
|
|
||||||
optional = false
|
|
||||||
python-versions = ">=3.6"
|
|
||||||
|
|
||||||
[package.extras]
|
|
||||||
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
|
|
||||||
testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
|
|
||||||
|
|
||||||
[metadata]
|
|
||||||
lock-version = "1.1"
|
|
||||||
python-versions = "^3.6"
|
|
||||||
content-hash = "8b534309919acadb4c5b088a7a9aff76066ab695b1d39bf507b32db898450b76"
|
|
||||||
|
|
||||||
[metadata.files]
|
|
||||||
atomicwrites = [
|
|
||||||
{file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"},
|
|
||||||
{file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"},
|
|
||||||
]
|
|
||||||
attrs = [
|
|
||||||
{file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"},
|
|
||||||
{file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
|
|
||||||
]
|
|
||||||
colorama = [
|
|
||||||
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
|
|
||||||
{file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
|
|
||||||
]
|
|
||||||
coverage = [
|
|
||||||
{file = "coverage-6.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6dbc1536e105adda7a6312c778f15aaabe583b0e9a0b0a324990334fd458c94b"},
|
|
||||||
{file = "coverage-6.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:174cf9b4bef0db2e8244f82059a5a72bd47e1d40e71c68ab055425172b16b7d0"},
|
|
||||||
{file = "coverage-6.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:92b8c845527eae547a2a6617d336adc56394050c3ed8a6918683646328fbb6da"},
|
|
||||||
{file = "coverage-6.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c7912d1526299cb04c88288e148c6c87c0df600eca76efd99d84396cfe00ef1d"},
|
|
||||||
{file = "coverage-6.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d5d2033d5db1d58ae2d62f095e1aefb6988af65b4b12cb8987af409587cc0739"},
|
|
||||||
{file = "coverage-6.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:3feac4084291642165c3a0d9eaebedf19ffa505016c4d3db15bfe235718d4971"},
|
|
||||||
{file = "coverage-6.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:276651978c94a8c5672ea60a2656e95a3cce2a3f31e9fb2d5ebd4c215d095840"},
|
|
||||||
{file = "coverage-6.2-cp310-cp310-win32.whl", hash = "sha256:f506af4f27def639ba45789fa6fde45f9a217da0be05f8910458e4557eed020c"},
|
|
||||||
{file = "coverage-6.2-cp310-cp310-win_amd64.whl", hash = "sha256:3f7c17209eef285c86f819ff04a6d4cbee9b33ef05cbcaae4c0b4e8e06b3ec8f"},
|
|
||||||
{file = "coverage-6.2-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:13362889b2d46e8d9f97c421539c97c963e34031ab0cb89e8ca83a10cc71ac76"},
|
|
||||||
{file = "coverage-6.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:22e60a3ca5acba37d1d4a2ee66e051f5b0e1b9ac950b5b0cf4aa5366eda41d47"},
|
|
||||||
{file = "coverage-6.2-cp311-cp311-win_amd64.whl", hash = "sha256:b637c57fdb8be84e91fac60d9325a66a5981f8086c954ea2772efe28425eaf64"},
|
|
||||||
{file = "coverage-6.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f467bbb837691ab5a8ca359199d3429a11a01e6dfb3d9dcc676dc035ca93c0a9"},
|
|
||||||
{file = "coverage-6.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2641f803ee9f95b1f387f3e8f3bf28d83d9b69a39e9911e5bfee832bea75240d"},
|
|
||||||
{file = "coverage-6.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1219d760ccfafc03c0822ae2e06e3b1248a8e6d1a70928966bafc6838d3c9e48"},
|
|
||||||
{file = "coverage-6.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9a2b5b52be0a8626fcbffd7e689781bf8c2ac01613e77feda93d96184949a98e"},
|
|
||||||
{file = "coverage-6.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:8e2c35a4c1f269704e90888e56f794e2d9c0262fb0c1b1c8c4ee44d9b9e77b5d"},
|
|
||||||
{file = "coverage-6.2-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:5d6b09c972ce9200264c35a1d53d43ca55ef61836d9ec60f0d44273a31aa9f17"},
|
|
||||||
{file = "coverage-6.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:e3db840a4dee542e37e09f30859f1612da90e1c5239a6a2498c473183a50e781"},
|
|
||||||
{file = "coverage-6.2-cp36-cp36m-win32.whl", hash = "sha256:4e547122ca2d244f7c090fe3f4b5a5861255ff66b7ab6d98f44a0222aaf8671a"},
|
|
||||||
{file = "coverage-6.2-cp36-cp36m-win_amd64.whl", hash = "sha256:01774a2c2c729619760320270e42cd9e797427ecfddd32c2a7b639cdc481f3c0"},
|
|
||||||
{file = "coverage-6.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:fb8b8ee99b3fffe4fd86f4c81b35a6bf7e4462cba019997af2fe679365db0c49"},
|
|
||||||
{file = "coverage-6.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:619346d57c7126ae49ac95b11b0dc8e36c1dd49d148477461bb66c8cf13bb521"},
|
|
||||||
{file = "coverage-6.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0a7726f74ff63f41e95ed3a89fef002916c828bb5fcae83b505b49d81a066884"},
|
|
||||||
{file = "coverage-6.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cfd9386c1d6f13b37e05a91a8583e802f8059bebfccde61a418c5808dea6bbfa"},
|
|
||||||
{file = "coverage-6.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:17e6c11038d4ed6e8af1407d9e89a2904d573be29d51515f14262d7f10ef0a64"},
|
|
||||||
{file = "coverage-6.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c254b03032d5a06de049ce8bca8338a5185f07fb76600afff3c161e053d88617"},
|
|
||||||
{file = "coverage-6.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:dca38a21e4423f3edb821292e97cec7ad38086f84313462098568baedf4331f8"},
|
|
||||||
{file = "coverage-6.2-cp37-cp37m-win32.whl", hash = "sha256:600617008aa82032ddeace2535626d1bc212dfff32b43989539deda63b3f36e4"},
|
|
||||||
{file = "coverage-6.2-cp37-cp37m-win_amd64.whl", hash = "sha256:bf154ba7ee2fd613eb541c2bc03d3d9ac667080a737449d1a3fb342740eb1a74"},
|
|
||||||
{file = "coverage-6.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f9afb5b746781fc2abce26193d1c817b7eb0e11459510fba65d2bd77fe161d9e"},
|
|
||||||
{file = "coverage-6.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edcada2e24ed68f019175c2b2af2a8b481d3d084798b8c20d15d34f5c733fa58"},
|
|
||||||
{file = "coverage-6.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a9c8c4283e17690ff1a7427123ffb428ad6a52ed720d550e299e8291e33184dc"},
|
|
||||||
{file = "coverage-6.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f614fc9956d76d8a88a88bb41ddc12709caa755666f580af3a688899721efecd"},
|
|
||||||
{file = "coverage-6.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9365ed5cce5d0cf2c10afc6add145c5037d3148585b8ae0e77cc1efdd6aa2953"},
|
|
||||||
{file = "coverage-6.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8bdfe9ff3a4ea37d17f172ac0dff1e1c383aec17a636b9b35906babc9f0f5475"},
|
|
||||||
{file = "coverage-6.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:63c424e6f5b4ab1cf1e23a43b12f542b0ec2e54f99ec9f11b75382152981df57"},
|
|
||||||
{file = "coverage-6.2-cp38-cp38-win32.whl", hash = "sha256:49dbff64961bc9bdd2289a2bda6a3a5a331964ba5497f694e2cbd540d656dc1c"},
|
|
||||||
{file = "coverage-6.2-cp38-cp38-win_amd64.whl", hash = "sha256:9a29311bd6429be317c1f3fe4bc06c4c5ee45e2fa61b2a19d4d1d6111cb94af2"},
|
|
||||||
{file = "coverage-6.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:03b20e52b7d31be571c9c06b74746746d4eb82fc260e594dc662ed48145e9efd"},
|
|
||||||
{file = "coverage-6.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:215f8afcc02a24c2d9a10d3790b21054b58d71f4b3c6f055d4bb1b15cecce685"},
|
|
||||||
{file = "coverage-6.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a4bdeb0a52d1d04123b41d90a4390b096f3ef38eee35e11f0b22c2d031222c6c"},
|
|
||||||
{file = "coverage-6.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c332d8f8d448ded473b97fefe4a0983265af21917d8b0cdcb8bb06b2afe632c3"},
|
|
||||||
{file = "coverage-6.2-cp39-cp39-win32.whl", hash = "sha256:6e1394d24d5938e561fbeaa0cd3d356207579c28bd1792f25a068743f2d5b282"},
|
|
||||||
{file = "coverage-6.2-cp39-cp39-win_amd64.whl", hash = "sha256:86f2e78b1eff847609b1ca8050c9e1fa3bd44ce755b2ec30e70f2d3ba3844644"},
|
|
||||||
{file = "coverage-6.2-pp36.pp37.pp38-none-any.whl", hash = "sha256:5829192582c0ec8ca4a2532407bc14c2f338d9878a10442f5d03804a95fac9de"},
|
|
||||||
{file = "coverage-6.2.tar.gz", hash = "sha256:e2cad8093172b7d1595b4ad66f24270808658e11acf43a8f95b41276162eb5b8"},
|
|
||||||
]
|
|
||||||
dataclasses = [
|
|
||||||
{file = "dataclasses-0.8-py3-none-any.whl", hash = "sha256:0201d89fa866f68c8ebd9d08ee6ff50c0b255f8ec63a71c16fda7af82bb887bf"},
|
|
||||||
{file = "dataclasses-0.8.tar.gz", hash = "sha256:8479067f342acf957dc82ec415d355ab5edb7e7646b90dc6e2fd1d96ad084c97"},
|
|
||||||
]
|
|
||||||
importlib-metadata = [
|
|
||||||
{file = "importlib_metadata-4.8.3-py3-none-any.whl", hash = "sha256:65a9576a5b2d58ca44d133c42a241905cc45e34d2c06fd5ba2bafa221e5d7b5e"},
|
|
||||||
{file = "importlib_metadata-4.8.3.tar.gz", hash = "sha256:766abffff765960fcc18003801f7044eb6755ffae4521c8e8ce8e83b9c9b0668"},
|
|
||||||
]
|
|
||||||
iniconfig = [
|
|
||||||
{file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"},
|
|
||||||
{file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"},
|
|
||||||
]
|
|
||||||
packaging = [
|
|
||||||
{file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"},
|
|
||||||
{file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"},
|
|
||||||
]
|
|
||||||
pluggy = [
|
|
||||||
{file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"},
|
|
||||||
{file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"},
|
|
||||||
]
|
|
||||||
py = [
|
|
||||||
{file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"},
|
|
||||||
{file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"},
|
|
||||||
]
|
|
||||||
pydantic = [
|
|
||||||
{file = "pydantic-1.7.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:3c60039e84552442defbcb5d56711ef0e057028ca7bfc559374917408a88d84e"},
|
|
||||||
{file = "pydantic-1.7.4-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:6e7e314acb170e143c6f3912f93f2ec80a96aa2009ee681356b7ce20d57e5c62"},
|
|
||||||
{file = "pydantic-1.7.4-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:8ef77cd17b73b5ba46788d040c0e820e49a2d80cfcd66fda3ba8be31094fd146"},
|
|
||||||
{file = "pydantic-1.7.4-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:115d8aa6f257a1d469c66b6bfc7aaf04cd87c25095f24542065c68ebcb42fe63"},
|
|
||||||
{file = "pydantic-1.7.4-cp36-cp36m-win_amd64.whl", hash = "sha256:66757d4e1eab69a3cfd3114480cc1d72b6dd847c4d30e676ae838c6740fdd146"},
|
|
||||||
{file = "pydantic-1.7.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4c92863263e4bd89e4f9cf1ab70d918170c51bd96305fe7b00853d80660acb26"},
|
|
||||||
{file = "pydantic-1.7.4-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:3b8154babf30a5e0fa3aa91f188356763749d9b30f7f211fafb247d4256d7877"},
|
|
||||||
{file = "pydantic-1.7.4-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:80cc46378505f7ff202879dcffe4bfbf776c15675028f6e08d1d10bdfbb168ac"},
|
|
||||||
{file = "pydantic-1.7.4-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:dda60d7878a5af2d8560c55c7c47a8908344aa78d32ec1c02d742ede09c534df"},
|
|
||||||
{file = "pydantic-1.7.4-cp37-cp37m-win_amd64.whl", hash = "sha256:4c1979d5cc3e14b35f0825caddea5a243dd6085e2a7539c006bc46997ef7a61a"},
|
|
||||||
{file = "pydantic-1.7.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8857576600c32aa488f18d30833aa833b54a48e3bab3adb6de97e463af71f8f8"},
|
|
||||||
{file = "pydantic-1.7.4-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1f86d4da363badb39426a0ff494bf1d8510cd2f7274f460eee37bdbf2fd495ec"},
|
|
||||||
{file = "pydantic-1.7.4-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:3ea1256a9e782149381e8200119f3e2edea7cd6b123f1c79ab4bbefe4d9ba2c9"},
|
|
||||||
{file = "pydantic-1.7.4-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:e28455b42a0465a7bf2cde5eab530389226ce7dc779de28d17b8377245982b1e"},
|
|
||||||
{file = "pydantic-1.7.4-cp38-cp38-win_amd64.whl", hash = "sha256:47c5b1d44934375a3311891cabd450c150a31cf5c22e84aa172967bf186718be"},
|
|
||||||
{file = "pydantic-1.7.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:00250e5123dd0b123ff72be0e1b69140e0b0b9e404d15be3846b77c6f1b1e387"},
|
|
||||||
{file = "pydantic-1.7.4-cp39-cp39-manylinux1_i686.whl", hash = "sha256:d24aa3f7f791a023888976b600f2f389d3713e4f23b7a4c88217d3fce61cdffc"},
|
|
||||||
{file = "pydantic-1.7.4-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:2c44a9afd4c4c850885436a4209376857989aaf0853c7b118bb2e628d4b78c4e"},
|
|
||||||
{file = "pydantic-1.7.4-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:e87edd753da0ca1d44e308a1b1034859ffeab1f4a4492276bff9e1c3230db4fe"},
|
|
||||||
{file = "pydantic-1.7.4-cp39-cp39-win_amd64.whl", hash = "sha256:a3026ee105b5360855e500b4abf1a1d0b034d88e75a2d0d66a4c35e60858e15b"},
|
|
||||||
{file = "pydantic-1.7.4-py3-none-any.whl", hash = "sha256:a82385c6d5a77e3387e94612e3e34b77e13c39ff1295c26e3ba664e7b98073e2"},
|
|
||||||
{file = "pydantic-1.7.4.tar.gz", hash = "sha256:0a1abcbd525fbb52da58c813d54c2ec706c31a91afdb75411a73dd1dec036595"},
|
|
||||||
]
|
|
||||||
pygls = [
|
|
||||||
{file = "pygls-0.11.3-py3-none-any.whl", hash = "sha256:5c925b182f2b0aa38d0ce83a9829ca5aed8eb9c7079cffc5bddff2da1033b58f"},
|
|
||||||
{file = "pygls-0.11.3.tar.gz", hash = "sha256:4d86fc854e6d6613cd42bf7511e9c6aac947fc8d62ff973a705570b036d969f2"},
|
|
||||||
]
|
|
||||||
pyparsing = [
|
|
||||||
{file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"},
|
|
||||||
{file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"},
|
|
||||||
]
|
|
||||||
pytest = [
|
|
||||||
{file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"},
|
|
||||||
{file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"},
|
|
||||||
]
|
|
||||||
pytest-cov = [
|
|
||||||
{file = "pytest-cov-2.12.1.tar.gz", hash = "sha256:261ceeb8c227b726249b376b8526b600f38667ee314f910353fa318caa01f4d7"},
|
|
||||||
{file = "pytest_cov-2.12.1-py2.py3-none-any.whl", hash = "sha256:261bb9e47e65bd099c89c3edf92972865210c36813f80ede5277dceb77a4a62a"},
|
|
||||||
]
|
|
||||||
pytest-datadir = [
|
|
||||||
{file = "pytest-datadir-1.3.1.tar.gz", hash = "sha256:d3af1e738df87515ee509d6135780f25a15959766d9c2b2dbe02bf4fb979cb18"},
|
|
||||||
{file = "pytest_datadir-1.3.1-py2.py3-none-any.whl", hash = "sha256:1847ed0efe0bc54cac40ab3fba6d651c2f03d18dd01f2a582979604d32e7621e"},
|
|
||||||
]
|
|
||||||
toml = [
|
|
||||||
{file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"},
|
|
||||||
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
|
|
||||||
]
|
|
||||||
typeguard = [
|
|
||||||
{file = "typeguard-2.13.3-py3-none-any.whl", hash = "sha256:5e3e3be01e887e7eafae5af63d1f36c849aaa94e3a0112097312aabfa16284f1"},
|
|
||||||
{file = "typeguard-2.13.3.tar.gz", hash = "sha256:00edaa8da3a133674796cf5ea87d9f4b4c367d77476e185e80251cc13dfbb8c4"},
|
|
||||||
]
|
|
||||||
typing-extensions = [
|
|
||||||
{file = "typing_extensions-4.1.1-py3-none-any.whl", hash = "sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2"},
|
|
||||||
{file = "typing_extensions-4.1.1.tar.gz", hash = "sha256:1a9462dcc3347a79b1f1c0271fbe79e844580bb598bafa1ed208b94da3cdcd42"},
|
|
||||||
]
|
|
||||||
zipp = [
|
|
||||||
{file = "zipp-3.6.0-py3-none-any.whl", hash = "sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc"},
|
|
||||||
{file = "zipp-3.6.0.tar.gz", hash = "sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832"},
|
|
||||||
]
|
|
||||||
@@ -1,51 +1,61 @@
|
|||||||
[tool.poetry]
|
[project]
|
||||||
name = "cmake-language-server"
|
name = "cmake-language-server"
|
||||||
version = "0.1.4"
|
dynamic = ["version"]
|
||||||
description = "CMake LSP Implementation"
|
description = "CMake LSP Implementation"
|
||||||
license = "MIT"
|
authors = [
|
||||||
authors = ["regen"]
|
{name = "Regen"},
|
||||||
|
]
|
||||||
|
dependencies = [
|
||||||
|
"pygls>=1.1.1",
|
||||||
|
]
|
||||||
|
requires-python = ">=3.7.9,<3.12"
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
repository = "https://github.com/regen100/cmake-language-server"
|
license = {text = "MIT"}
|
||||||
keywords = ["cmake", "completion", "vim", "lsp"]
|
keywords = ["cmake", "completion", "vim", "lsp"]
|
||||||
classifiers = [
|
classifiers = [
|
||||||
"Development Status :: 3 - Alpha",
|
"Development Status :: 3 - Alpha", "Environment :: Console",
|
||||||
"Environment :: Console",
|
|
||||||
"Intended Audience :: Developers",
|
"Intended Audience :: Developers",
|
||||||
"Operating System :: OS Independent",
|
"Operating System :: OS Independent",
|
||||||
"Topic :: Software Development",
|
"Topic :: Software Development",
|
||||||
"Topic :: Text Editors :: Integrated Development Environments (IDE)",
|
"Topic :: Text Editors :: Integrated Development Environments (IDE)", "Topic :: Utilities",
|
||||||
"Topic :: Utilities"
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[tool.poetry.dependencies]
|
[project.urls]
|
||||||
python = "^3.6"
|
repository = "https://github.com/regen100/cmake-language-server"
|
||||||
pygls = "^0.11"
|
|
||||||
pyparsing = "^2.4"
|
|
||||||
importlib-metadata = {version = "^4.8", python = "<3.8"}
|
|
||||||
|
|
||||||
[tool.poetry.dev-dependencies]
|
[project.scripts]
|
||||||
pytest = "^6.2"
|
|
||||||
pytest-datadir = "^1.3"
|
|
||||||
pytest-cov = "^2.11"
|
|
||||||
|
|
||||||
[tool.poetry.scripts]
|
|
||||||
cmake-language-server = "cmake_language_server.server:main"
|
cmake-language-server = "cmake_language_server.server:main"
|
||||||
|
|
||||||
[build-system]
|
[build-system]
|
||||||
requires = ["poetry-core>=1.0.0"]
|
requires = ["pdm-backend"]
|
||||||
build-backend = "poetry.core.masonry.api"
|
build-backend = "pdm.backend"
|
||||||
|
|
||||||
[tool.pysen]
|
[tool.pdm.version]
|
||||||
version = "0.10"
|
source = "scm"
|
||||||
|
write_to = "cmake_language_server/version.py"
|
||||||
|
write_template = "__version__ = \"{}\"\n"
|
||||||
|
|
||||||
[tool.pysen.lint]
|
[tool.pdm.dev-dependencies]
|
||||||
enable_black = true
|
dev = [
|
||||||
enable_flake8 = true
|
"pytest>=7.2.0",
|
||||||
enable_isort = true
|
"pytest-datadir>=1.4.1",
|
||||||
enable_mypy = true
|
"pytest-cov>=4.0.0",
|
||||||
mypy_preset = "strict"
|
"cmakelang>=0.6.13",
|
||||||
line_length = 88
|
]
|
||||||
py_version = "py36"
|
lint = [
|
||||||
|
"mypy>=0.991",
|
||||||
|
"flake8>=5.0.4",
|
||||||
|
"black>=22.12.0",
|
||||||
|
"isort>=5.11.4",
|
||||||
|
]
|
||||||
|
|
||||||
[[tool.pysen.lint.mypy_targets]]
|
[tool.pdm.scripts]
|
||||||
paths = ["."]
|
test = "pytest --cov-report=term --cov-report=xml --cov=cmake_language_server -sv tests"
|
||||||
|
|
||||||
|
[tool.pdm.scripts.lint]
|
||||||
|
shell = """
|
||||||
|
isort --check cmake_language_server tests
|
||||||
|
black --check cmake_language_server tests
|
||||||
|
flake8 cmake_language_server tests
|
||||||
|
mypy cmake_language_server tests
|
||||||
|
"""
|
||||||
|
|||||||
12
setup.cfg
Normal file
12
setup.cfg
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
[flake8]
|
||||||
|
max-line-length = 88
|
||||||
|
extend-ignore = E203
|
||||||
|
|
||||||
|
[isort]
|
||||||
|
profile = black
|
||||||
|
line_length = 88
|
||||||
|
|
||||||
|
[mypy]
|
||||||
|
strict = true
|
||||||
|
ignore_missing_imports = true
|
||||||
|
show_error_codes = true
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
try:
|
|
||||||
import importlib.metadata as importlib_metadata
|
|
||||||
except ModuleNotFoundError:
|
|
||||||
import importlib_metadata
|
|
||||||
|
|
||||||
__version__ = importlib_metadata.version(__name__)
|
|
||||||
@@ -1,160 +0,0 @@
|
|||||||
from typing import List, Optional
|
|
||||||
|
|
||||||
from .parser import TokenList
|
|
||||||
|
|
||||||
|
|
||||||
class Formatter(object):
|
|
||||||
indent: str
|
|
||||||
lower_identifier: bool
|
|
||||||
|
|
||||||
def __init__(self, indent: str = " ", lower_identifier: bool = True):
|
|
||||||
self.indent = indent
|
|
||||||
self.lower_identifier = lower_identifier
|
|
||||||
|
|
||||||
def format(self, tokens: TokenList) -> str:
|
|
||||||
cmds: List[str] = [""]
|
|
||||||
indent_level = 0
|
|
||||||
for token in tokens:
|
|
||||||
if isinstance(token, tuple):
|
|
||||||
raw_identifier = token[0]
|
|
||||||
identifier = raw_identifier.lower()
|
|
||||||
if identifier in (
|
|
||||||
"elseif",
|
|
||||||
"else",
|
|
||||||
"endif",
|
|
||||||
"endforeach",
|
|
||||||
"endwhile",
|
|
||||||
"endmacro",
|
|
||||||
"endfunction",
|
|
||||||
):
|
|
||||||
if indent_level > 0:
|
|
||||||
indent_level -= 1
|
|
||||||
cmds[-1] = self.indent * indent_level
|
|
||||||
cmds[-1] += identifier if self.lower_identifier else raw_identifier
|
|
||||||
args = self._format_args(token[1])
|
|
||||||
if len(args) < 2:
|
|
||||||
cmds[-1] += "(" + "".join(args) + ")"
|
|
||||||
else:
|
|
||||||
cmds[-1] += "(\n"
|
|
||||||
for arg in args:
|
|
||||||
cmds[-1] += self.indent * (indent_level + 1) + arg + "\n"
|
|
||||||
cmds[-1] += self.indent * indent_level + ")"
|
|
||||||
if identifier in (
|
|
||||||
"if",
|
|
||||||
"elseif",
|
|
||||||
"else",
|
|
||||||
"foreach",
|
|
||||||
"while",
|
|
||||||
"macro",
|
|
||||||
"function",
|
|
||||||
):
|
|
||||||
indent_level += 1
|
|
||||||
elif token == "\n":
|
|
||||||
cmds.append("")
|
|
||||||
elif token[0] == "#":
|
|
||||||
if cmds[-1]:
|
|
||||||
cmds[-1] += token
|
|
||||||
else:
|
|
||||||
cmds[-1] = self.indent * indent_level + token
|
|
||||||
elif cmds[-1]:
|
|
||||||
cmds[-1] += token
|
|
||||||
|
|
||||||
cmds = self._strip_line(cmds)
|
|
||||||
return "\n".join(cmds) + "\n"
|
|
||||||
|
|
||||||
def _format_args(self, args: List[str]) -> List[str]:
|
|
||||||
lines = [""]
|
|
||||||
for i in range(len(args)):
|
|
||||||
arg = args[i]
|
|
||||||
if arg[0] == "#":
|
|
||||||
lines[-1] += arg
|
|
||||||
elif arg[0] == "\n":
|
|
||||||
lines.append("")
|
|
||||||
elif arg.isspace():
|
|
||||||
if lines[-1]:
|
|
||||||
if i + 1 < len(args) and args[i + 1][0] == "#":
|
|
||||||
lines[-1] += arg
|
|
||||||
else:
|
|
||||||
lines[-1] += " "
|
|
||||||
else:
|
|
||||||
lines[-1] += arg
|
|
||||||
|
|
||||||
return self._strip_line(lines)
|
|
||||||
|
|
||||||
def _strip_line(self, lines: List[str]) -> List[str]:
|
|
||||||
"""Delete empty lines at the start/end of the input"""
|
|
||||||
|
|
||||||
ret: List[str] = []
|
|
||||||
for line in lines:
|
|
||||||
line = line.rstrip()
|
|
||||||
if line != "" or len(ret) > 0:
|
|
||||||
ret.append(line)
|
|
||||||
while ret and ret[-1] == "":
|
|
||||||
del ret[-1]
|
|
||||||
return ret
|
|
||||||
|
|
||||||
|
|
||||||
def main(argss: Optional[List[str]] = None) -> None:
|
|
||||||
import sys
|
|
||||||
from argparse import ArgumentParser
|
|
||||||
from difflib import unified_diff
|
|
||||||
from pathlib import Path
|
|
||||||
|
|
||||||
from . import __version__
|
|
||||||
from .parser import ListParser
|
|
||||||
|
|
||||||
parser = ArgumentParser(
|
|
||||||
description="Format CMake list files.",
|
|
||||||
epilog="""
|
|
||||||
If no arguments are specified, it formats the code from
|
|
||||||
standard input and writes the result to the standard output.""",
|
|
||||||
)
|
|
||||||
parser.add_argument("lists", type=Path, nargs="*", help="CMake list files")
|
|
||||||
group = parser.add_mutually_exclusive_group()
|
|
||||||
group.add_argument("-i", "--inplace", action="store_true", help="inplace edit")
|
|
||||||
group.add_argument("-d", "--diff", action="store_true", help="show diff")
|
|
||||||
parser.add_argument(
|
|
||||||
"--version", action="version", version=f"%(prog)s {__version__}"
|
|
||||||
)
|
|
||||||
|
|
||||||
args = parser.parse_args(argss)
|
|
||||||
|
|
||||||
if not args.lists and args.inplace:
|
|
||||||
print("error: cannot use -i when no arguments are specified.", file=sys.stderr)
|
|
||||||
return
|
|
||||||
if not args.lists:
|
|
||||||
args.lists.append(None)
|
|
||||||
|
|
||||||
list_parser = ListParser()
|
|
||||||
formatter = Formatter()
|
|
||||||
for listpath in args.lists:
|
|
||||||
if listpath is None:
|
|
||||||
listpath = "(stdin)"
|
|
||||||
content = sys.stdin.read()
|
|
||||||
else:
|
|
||||||
with listpath.open() as fp:
|
|
||||||
content = fp.read()
|
|
||||||
tokens, remain = list_parser.parse(content)
|
|
||||||
formatted = content if remain else formatter.format(tokens)
|
|
||||||
|
|
||||||
if args.inplace:
|
|
||||||
if not remain:
|
|
||||||
with listpath.open("w") as fp:
|
|
||||||
fp.write(formatted)
|
|
||||||
elif args.diff:
|
|
||||||
diff = unified_diff(
|
|
||||||
content.splitlines(True),
|
|
||||||
formatted.splitlines(True),
|
|
||||||
str(listpath),
|
|
||||||
str(listpath),
|
|
||||||
"(before formatting)",
|
|
||||||
"(after formatting)",
|
|
||||||
)
|
|
||||||
diffstr = "".join(diff)
|
|
||||||
print(diffstr, end="")
|
|
||||||
else:
|
|
||||||
print(formatted, end="")
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
||||||
@@ -1,70 +0,0 @@
|
|||||||
from typing import List, Tuple, Union
|
|
||||||
|
|
||||||
import pyparsing as pp
|
|
||||||
|
|
||||||
CommandTokenType = Tuple[str, List[str]]
|
|
||||||
TokenType = Union[str, CommandTokenType]
|
|
||||||
TokenList = List[TokenType]
|
|
||||||
|
|
||||||
|
|
||||||
class ListParser(object):
|
|
||||||
_parser: pp.ParserElement
|
|
||||||
|
|
||||||
def __init__(self) -> None:
|
|
||||||
newline = "\n"
|
|
||||||
space_plus = pp.Regex("[ \t]+")
|
|
||||||
space_star = pp.Optional(space_plus)
|
|
||||||
|
|
||||||
quoted_element = pp.Regex(r'[^\\"]|\\[^A-Za-z0-9]|\\[trn]')
|
|
||||||
quoted_argument = pp.Combine('"' + pp.ZeroOrMore(quoted_element) + '"')
|
|
||||||
|
|
||||||
bracket_content = pp.Forward()
|
|
||||||
|
|
||||||
def action_bracket_open(tokens: pp.ParseResults) -> None:
|
|
||||||
nonlocal bracket_content
|
|
||||||
marker = "]" + "=" * (len(tokens[0]) - 2) + "]"
|
|
||||||
bracket_content <<= pp.SkipTo(marker, include=True)
|
|
||||||
|
|
||||||
bracket_open = pp.Regex(r"\[=*\[").setParseAction(action_bracket_open)
|
|
||||||
bracket_argument = pp.Combine(bracket_open + bracket_content)
|
|
||||||
|
|
||||||
unquoted_element = pp.Regex(r'[^\s()#"\\]|\\[^A-Za-z0-9]|\\[trn]')
|
|
||||||
unquoted_argument = pp.Combine(pp.OneOrMore(unquoted_element))
|
|
||||||
|
|
||||||
argument = bracket_argument | quoted_argument | unquoted_argument
|
|
||||||
|
|
||||||
line_comment = pp.Combine("#" + ~bracket_open + pp.SkipTo(pp.LineEnd()))
|
|
||||||
bracket_comment = pp.Combine("#" + bracket_argument)
|
|
||||||
line_ending = (
|
|
||||||
space_star
|
|
||||||
+ pp.ZeroOrMore(bracket_comment + space_star)
|
|
||||||
+ pp.Optional(line_comment)
|
|
||||||
+ (newline | pp.lineEnd)
|
|
||||||
)
|
|
||||||
|
|
||||||
identifier = pp.Word(pp.alphas + "_", pp.alphanums + "_")
|
|
||||||
arguments = pp.Forward()
|
|
||||||
(
|
|
||||||
arguments
|
|
||||||
<< pp.ZeroOrMore(
|
|
||||||
argument | line_ending | space_plus | "(" + arguments + ")"
|
|
||||||
).leaveWhitespace()
|
|
||||||
)
|
|
||||||
arguments = pp.Group(arguments)
|
|
||||||
PAREN_L, PAREN_R = map(pp.Suppress, "()")
|
|
||||||
command_invocation = (
|
|
||||||
identifier + space_star.suppress() + PAREN_L + arguments + PAREN_R
|
|
||||||
).setParseAction(lambda t: (t[0], t[1].asList()))
|
|
||||||
|
|
||||||
file_element = (
|
|
||||||
space_star + command_invocation + line_ending | line_ending
|
|
||||||
).leaveWhitespace()
|
|
||||||
file = pp.ZeroOrMore(file_element)
|
|
||||||
|
|
||||||
self._parser = file
|
|
||||||
|
|
||||||
def parse(self, liststr: str) -> Tuple[TokenList, str]:
|
|
||||||
for t, s, e in self._parser.scanString(liststr, maxMatches=1):
|
|
||||||
if s == 0:
|
|
||||||
return t.asList(), liststr[e:]
|
|
||||||
return [], liststr
|
|
||||||
@@ -1,17 +1,16 @@
|
|||||||
import asyncio
|
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
import pprint
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from subprocess import PIPE, run
|
from subprocess import PIPE, run
|
||||||
from threading import Thread
|
from threading import Thread
|
||||||
from typing import Iterable, Tuple
|
from typing import Iterable, Tuple
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from cmake_language_server.server import CMakeLanguageServer
|
from lsprotocol.types import EXIT, SHUTDOWN
|
||||||
from pygls.lsp.methods import EXIT
|
|
||||||
from pygls.server import LanguageServer
|
from pygls.server import LanguageServer
|
||||||
|
|
||||||
|
from cmake_language_server.server import CMakeLanguageServer
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture()
|
@pytest.fixture()
|
||||||
def cmake_build(shared_datadir: Path) -> Iterable[Path]:
|
def cmake_build(shared_datadir: Path) -> Iterable[Path]:
|
||||||
@@ -26,7 +25,6 @@ def cmake_build(shared_datadir: Path) -> Iterable[Path]:
|
|||||||
universal_newlines=True,
|
universal_newlines=True,
|
||||||
)
|
)
|
||||||
if p.returncode != 0:
|
if p.returncode != 0:
|
||||||
logging.error("env:\n" + pprint.pformat(os.environ))
|
|
||||||
logging.error("stdout:\n" + p.stdout)
|
logging.error("stdout:\n" + p.stdout)
|
||||||
logging.error("stderr:\n" + p.stderr)
|
logging.error("stderr:\n" + p.stderr)
|
||||||
raise RuntimeError("CMake failed")
|
raise RuntimeError("CMake failed")
|
||||||
@@ -39,24 +37,24 @@ def client_server() -> Iterable[Tuple[LanguageServer, CMakeLanguageServer]]:
|
|||||||
s2c_r, s2c_w = os.pipe()
|
s2c_r, s2c_w = os.pipe()
|
||||||
|
|
||||||
def start(ls: LanguageServer, fdr: int, fdw: int) -> None:
|
def start(ls: LanguageServer, fdr: int, fdw: int) -> None:
|
||||||
# TODO: better patch is needed
|
# start_io type hints seem to be wrong?
|
||||||
# disable `close()` to avoid error messages
|
ls.start_io(os.fdopen(fdr, "rb"), os.fdopen(fdw, "wb")) # type:ignore[arg-type]
|
||||||
close = ls.loop.close
|
|
||||||
ls.loop.close = lambda: None # type: ignore
|
|
||||||
ls.start_io(os.fdopen(fdr, "rb"), os.fdopen(fdw, "wb")) # type: ignore
|
|
||||||
ls.loop.close = close # type: ignore
|
|
||||||
|
|
||||||
server = CMakeLanguageServer(asyncio.new_event_loop())
|
server = CMakeLanguageServer("server", "v1")
|
||||||
server_thread = Thread(target=start, args=(server, c2s_r, s2c_w))
|
server_thread = Thread(target=start, args=(server, c2s_r, s2c_w))
|
||||||
server_thread.start()
|
server_thread.start()
|
||||||
|
|
||||||
client = LanguageServer(asyncio.new_event_loop())
|
client = LanguageServer("client", "v1")
|
||||||
client_thread = Thread(target=start, args=(client, s2c_r, c2s_w))
|
client_thread = Thread(target=start, args=(client, s2c_r, c2s_w))
|
||||||
client_thread.start()
|
client_thread.start()
|
||||||
|
|
||||||
yield client, server
|
yield client, server
|
||||||
|
|
||||||
client.send_notification(EXIT)
|
# fix bug on python 3.7
|
||||||
server.send_notification(EXIT)
|
if hasattr(client.loop, "_signal_handlers"):
|
||||||
server_thread.join()
|
client.loop._signal_handlers.clear()
|
||||||
|
|
||||||
|
client.lsp.send_request(SHUTDOWN) # type:ignore[no-untyped-call]
|
||||||
|
client.lsp.notify(EXIT)
|
||||||
client_thread.join()
|
client_thread.join()
|
||||||
|
server_thread.join()
|
||||||
|
|||||||
@@ -1,168 +0,0 @@
|
|||||||
import sys
|
|
||||||
from contextlib import contextmanager
|
|
||||||
from io import StringIO
|
|
||||||
from pathlib import Path
|
|
||||||
from typing import Callable, Iterator
|
|
||||||
|
|
||||||
from cmake_language_server.formatter import Formatter, main
|
|
||||||
from cmake_language_server.parser import ListParser
|
|
||||||
from pytest import CaptureFixture
|
|
||||||
|
|
||||||
|
|
||||||
def make_formatter_test(liststr: str, expect: str) -> Callable[[], None]:
|
|
||||||
def test() -> None:
|
|
||||||
tokens, remain = ListParser().parse(liststr)
|
|
||||||
actual = Formatter().format(tokens)
|
|
||||||
assert actual == expect
|
|
||||||
|
|
||||||
return test
|
|
||||||
|
|
||||||
|
|
||||||
test_command = make_formatter_test("a()", "a()\n")
|
|
||||||
test_command_tolower = make_formatter_test("A()", "a()\n")
|
|
||||||
test_remove_space = make_formatter_test(
|
|
||||||
"""
|
|
||||||
#a
|
|
||||||
b ( c ) # d
|
|
||||||
""",
|
|
||||||
"""\
|
|
||||||
#a
|
|
||||||
b(c) # d
|
|
||||||
""",
|
|
||||||
)
|
|
||||||
test_indent_if = make_formatter_test(
|
|
||||||
"""
|
|
||||||
if()
|
|
||||||
a() # a
|
|
||||||
else()
|
|
||||||
# b
|
|
||||||
b()
|
|
||||||
endif()
|
|
||||||
""",
|
|
||||||
"""\
|
|
||||||
if()
|
|
||||||
a() # a
|
|
||||||
else()
|
|
||||||
# b
|
|
||||||
b()
|
|
||||||
endif()
|
|
||||||
""",
|
|
||||||
)
|
|
||||||
test_indent_if_nested = make_formatter_test(
|
|
||||||
"""
|
|
||||||
if()
|
|
||||||
if()
|
|
||||||
a()
|
|
||||||
b()
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
""",
|
|
||||||
"""\
|
|
||||||
if()
|
|
||||||
if()
|
|
||||||
a()
|
|
||||||
b()
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
""",
|
|
||||||
)
|
|
||||||
test_argument = make_formatter_test("a( b c d)", "a(b c d)\n")
|
|
||||||
test_argument_multiline = make_formatter_test(
|
|
||||||
"""
|
|
||||||
if()
|
|
||||||
a(b c
|
|
||||||
d # e
|
|
||||||
f
|
|
||||||
# g
|
|
||||||
) # h
|
|
||||||
endif()
|
|
||||||
""",
|
|
||||||
"""\
|
|
||||||
if()
|
|
||||||
a(
|
|
||||||
b c
|
|
||||||
d # e
|
|
||||||
f
|
|
||||||
# g
|
|
||||||
) # h
|
|
||||||
endif()
|
|
||||||
""",
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@contextmanager
|
|
||||||
def mock_stdin(buf: str) -> Iterator[None]:
|
|
||||||
stdin = sys.stdin
|
|
||||||
sys.stdin = StringIO(buf)
|
|
||||||
yield
|
|
||||||
sys.stdin = stdin
|
|
||||||
|
|
||||||
|
|
||||||
def test_main_stdin(capsys: CaptureFixture[str]) -> None:
|
|
||||||
with mock_stdin(" a()"):
|
|
||||||
main([])
|
|
||||||
captured = capsys.readouterr()
|
|
||||||
assert captured.out == "a()\n"
|
|
||||||
assert captured.err == ""
|
|
||||||
|
|
||||||
|
|
||||||
def test_main_stdin_diff(capsys: CaptureFixture[str]) -> None:
|
|
||||||
with mock_stdin(" a()"):
|
|
||||||
main(["-d"])
|
|
||||||
captured = capsys.readouterr()
|
|
||||||
assert "- a()" in captured.out
|
|
||||||
assert "+a()" in captured.out
|
|
||||||
assert captured.err == ""
|
|
||||||
|
|
||||||
|
|
||||||
def test_main_file_1(capsys: CaptureFixture[str], tmp_path: Path) -> None:
|
|
||||||
testfile1 = tmp_path / "list1.cmake"
|
|
||||||
with testfile1.open("w") as fp:
|
|
||||||
fp.write(" a()")
|
|
||||||
|
|
||||||
main([str(testfile1)])
|
|
||||||
captured = capsys.readouterr()
|
|
||||||
assert captured.out == "a()\n"
|
|
||||||
assert captured.err == ""
|
|
||||||
|
|
||||||
|
|
||||||
def test_main_file_2(capsys: CaptureFixture[str], tmp_path: Path) -> None:
|
|
||||||
testfile1 = tmp_path / "list1.cmake"
|
|
||||||
with testfile1.open("w") as fp:
|
|
||||||
fp.write(" a()")
|
|
||||||
testfile2 = tmp_path / "list2.cmake"
|
|
||||||
with testfile2.open("w") as fp:
|
|
||||||
fp.write(" b()")
|
|
||||||
|
|
||||||
main([str(testfile1), str(testfile2)])
|
|
||||||
captured = capsys.readouterr()
|
|
||||||
assert captured.out == "a()\nb()\n"
|
|
||||||
assert captured.err == ""
|
|
||||||
|
|
||||||
|
|
||||||
def test_main_inplace(capsys: CaptureFixture[str], tmp_path: Path) -> None:
|
|
||||||
testfile1 = tmp_path / "list1.cmake"
|
|
||||||
with testfile1.open("w") as fp:
|
|
||||||
fp.write(" a()")
|
|
||||||
|
|
||||||
main(["-i", str(testfile1)])
|
|
||||||
captured = capsys.readouterr()
|
|
||||||
assert captured.out == ""
|
|
||||||
assert captured.err == ""
|
|
||||||
|
|
||||||
with testfile1.open() as fp:
|
|
||||||
content = fp.read()
|
|
||||||
assert content == "a()\n"
|
|
||||||
|
|
||||||
|
|
||||||
def test_main_diff(capsys: CaptureFixture[str], tmp_path: Path) -> None:
|
|
||||||
testfile1 = tmp_path / "list1.cmake"
|
|
||||||
with testfile1.open("w") as fp:
|
|
||||||
fp.write(" a()")
|
|
||||||
|
|
||||||
main(["-d", str(testfile1)])
|
|
||||||
captured = capsys.readouterr()
|
|
||||||
assert str(testfile1) in captured.out
|
|
||||||
assert "- a()" in captured.out
|
|
||||||
assert "+a()" in captured.out
|
|
||||||
assert captured.err == ""
|
|
||||||
@@ -1,83 +0,0 @@
|
|||||||
from typing import Callable, List
|
|
||||||
|
|
||||||
from cmake_language_server.parser import ListParser, TokenType
|
|
||||||
|
|
||||||
|
|
||||||
def make_parser_test(
|
|
||||||
liststr: str, expect_token: List[TokenType], expect_remain: str = ""
|
|
||||||
) -> Callable[[], None]:
|
|
||||||
def test() -> None:
|
|
||||||
actual_token, actual_remain = ListParser().parse(liststr)
|
|
||||||
assert actual_token == expect_token
|
|
||||||
assert actual_remain == expect_remain
|
|
||||||
|
|
||||||
return test
|
|
||||||
|
|
||||||
|
|
||||||
test_command_no_args = make_parser_test("a()", [("a", [])])
|
|
||||||
test_command_space = make_parser_test(" a ()", [" ", ("a", [])])
|
|
||||||
test_command_arg = make_parser_test("a(b)", [("a", ["b"])])
|
|
||||||
test_command_arg_space = make_parser_test("a ( b )", [("a", ["b"])])
|
|
||||||
test_command_arg_escape = make_parser_test(r"a(\n\")", [("a", [r"\n\""])])
|
|
||||||
test_command_arg_paren = make_parser_test("a((b))", [("a", ["(", "b", ")"])])
|
|
||||||
test_command_arg_paren_paren = make_parser_test(
|
|
||||||
"a(((b)))", [("a", ["(", "(", "b", ")", ")"])]
|
|
||||||
)
|
|
||||||
test_command_arg_quote = make_parser_test(r'a("b\"")', [("a", [r'"b\""'])])
|
|
||||||
test_command_arg_quote_cont = make_parser_test('a("\\\n")', [("a", ['"\\\n"'])])
|
|
||||||
test_command_arg_quo_multiline = make_parser_test(
|
|
||||||
"""a("b
|
|
||||||
c
|
|
||||||
")""",
|
|
||||||
[("a", ['"b\nc\n"'])],
|
|
||||||
)
|
|
||||||
test_command_arg_bracket_0 = make_parser_test("a([[b]])", [("a", ["[[b]]"])])
|
|
||||||
test_command_arg_bracket_1 = make_parser_test("a([=[b]=])", [("a", ["[=[b]=]"])])
|
|
||||||
test_command_arg_space = make_parser_test("a ( b )", [("a", [" ", "b", " "])])
|
|
||||||
test_command_arg_multi = make_parser_test("a(b c)", [("a", ["b", " ", "c"])])
|
|
||||||
test_command_multielement = make_parser_test(
|
|
||||||
"""a(
|
|
||||||
b
|
|
||||||
c # c
|
|
||||||
)""",
|
|
||||||
[("a", ["\n", " ", "b", "\n", " ", "c", " ", "# c", "\n"])],
|
|
||||||
)
|
|
||||||
test_line_comment = make_parser_test("a() # b # c", [("a", []), " ", "# b # c"])
|
|
||||||
test_bracket_comment = make_parser_test("#[[a]]#[[b]]", ["#[[a]]", "#[[b]]"])
|
|
||||||
test_bracket_comment_nested = make_parser_test("#[=[[[a]]]=]", ["#[=[[[a]]]=]"])
|
|
||||||
test_bracket_comment_multiline = make_parser_test(
|
|
||||||
"#[[\na\nb\nc\n]]", ["#[[\na\nb\nc\n]]"]
|
|
||||||
)
|
|
||||||
test_if_block = make_parser_test(
|
|
||||||
"""if()
|
|
||||||
a()
|
|
||||||
else()
|
|
||||||
b()
|
|
||||||
endif()""",
|
|
||||||
[
|
|
||||||
("if", []),
|
|
||||||
"\n",
|
|
||||||
" ",
|
|
||||||
("a", []),
|
|
||||||
"\n",
|
|
||||||
("else", []),
|
|
||||||
"\n",
|
|
||||||
" ",
|
|
||||||
("b", []),
|
|
||||||
"\n",
|
|
||||||
("endif", []),
|
|
||||||
],
|
|
||||||
)
|
|
||||||
test_comment_multi_linecomment = make_parser_test(
|
|
||||||
"""a()# a
|
|
||||||
b() # b
|
|
||||||
c() # c""",
|
|
||||||
[("a", []), "# a", "\n", ("b", []), " ", "# b", "\n", ("c", []), " ", "# c"],
|
|
||||||
)
|
|
||||||
|
|
||||||
test_incomplete_id = make_parser_test("a", [], "a")
|
|
||||||
test_incomplete_command = make_parser_test("a(", [], "a(")
|
|
||||||
test_incomplete_id_after_command = make_parser_test("a()\nb", [("a", []), "\n"], "b")
|
|
||||||
test_incomplete_command_after_command = make_parser_test(
|
|
||||||
"a()\nb(c", [("a", []), "\n"], "b(c"
|
|
||||||
)
|
|
||||||
@@ -1,31 +1,32 @@
|
|||||||
from concurrent import futures
|
from concurrent import futures
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Any, Dict, Optional, Tuple
|
from typing import Optional, Tuple
|
||||||
|
|
||||||
from cmake_language_server.server import CMakeLanguageServer
|
import pytest
|
||||||
from pygls.lsp.methods import (
|
from lsprotocol.types import (
|
||||||
COMPLETION,
|
|
||||||
FORMATTING,
|
|
||||||
HOVER,
|
|
||||||
INITIALIZE,
|
INITIALIZE,
|
||||||
|
TEXT_DOCUMENT_COMPLETION,
|
||||||
TEXT_DOCUMENT_DID_OPEN,
|
TEXT_DOCUMENT_DID_OPEN,
|
||||||
)
|
TEXT_DOCUMENT_FORMATTING,
|
||||||
from pygls.lsp.types import (
|
TEXT_DOCUMENT_HOVER,
|
||||||
ClientCapabilities,
|
ClientCapabilities,
|
||||||
CompletionContext,
|
CompletionContext,
|
||||||
|
CompletionList,
|
||||||
CompletionParams,
|
CompletionParams,
|
||||||
CompletionTriggerKind,
|
CompletionTriggerKind,
|
||||||
DidOpenTextDocumentParams,
|
DidOpenTextDocumentParams,
|
||||||
DocumentFormattingParams,
|
DocumentFormattingParams,
|
||||||
FormattingOptions,
|
FormattingOptions,
|
||||||
|
HoverParams,
|
||||||
InitializeParams,
|
InitializeParams,
|
||||||
Position,
|
Position,
|
||||||
TextDocumentIdentifier,
|
TextDocumentIdentifier,
|
||||||
TextDocumentItem,
|
TextDocumentItem,
|
||||||
TextDocumentPositionParams,
|
|
||||||
)
|
)
|
||||||
from pygls.server import LanguageServer
|
from pygls.server import LanguageServer
|
||||||
|
|
||||||
|
from cmake_language_server.server import CMakeLanguageServer
|
||||||
|
|
||||||
CALL_TIMEOUT = 2
|
CALL_TIMEOUT = 2
|
||||||
|
|
||||||
|
|
||||||
@@ -33,7 +34,7 @@ def _init(client: LanguageServer, root: Path) -> None:
|
|||||||
retry = 3
|
retry = 3
|
||||||
while retry > 0:
|
while retry > 0:
|
||||||
try:
|
try:
|
||||||
client.lsp.send_request(
|
client.lsp.send_request( # type:ignore[no-untyped-call]
|
||||||
INITIALIZE,
|
INITIALIZE,
|
||||||
InitializeParams(
|
InitializeParams(
|
||||||
process_id=1234,
|
process_id=1234,
|
||||||
@@ -49,8 +50,7 @@ def _init(client: LanguageServer, root: Path) -> None:
|
|||||||
|
|
||||||
def _open(client: LanguageServer, path: Path, text: Optional[str] = None) -> None:
|
def _open(client: LanguageServer, path: Path, text: Optional[str] = None) -> None:
|
||||||
if text is None:
|
if text is None:
|
||||||
with open(path) as fp:
|
text = path.read_text()
|
||||||
text = fp.read()
|
|
||||||
|
|
||||||
client.lsp.notify(
|
client.lsp.notify(
|
||||||
TEXT_DOCUMENT_DID_OPEN,
|
TEXT_DOCUMENT_DID_OPEN,
|
||||||
@@ -67,7 +67,7 @@ def _test_completion(
|
|||||||
datadir: Path,
|
datadir: Path,
|
||||||
content: str,
|
content: str,
|
||||||
context: Optional[CompletionContext],
|
context: Optional[CompletionContext],
|
||||||
) -> Dict[str, Any]:
|
) -> CompletionList:
|
||||||
client, server = client_server
|
client, server = client_server
|
||||||
_init(client, datadir)
|
_init(client, datadir)
|
||||||
path = datadir / "CMakeLists.txt"
|
path = datadir / "CMakeLists.txt"
|
||||||
@@ -77,11 +77,10 @@ def _test_completion(
|
|||||||
position=Position(line=0, character=len(content)),
|
position=Position(line=0, character=len(content)),
|
||||||
context=context,
|
context=context,
|
||||||
)
|
)
|
||||||
if context is None:
|
ret = client.lsp.send_request( # type:ignore[no-untyped-call]
|
||||||
# some clients do not send context
|
TEXT_DOCUMENT_COMPLETION, params
|
||||||
del params.context
|
).result(timeout=CALL_TIMEOUT)
|
||||||
ret = client.lsp.send_request(COMPLETION, params).result(timeout=CALL_TIMEOUT)
|
assert isinstance(ret, CompletionList)
|
||||||
assert isinstance(ret, dict)
|
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
|
||||||
@@ -95,79 +94,43 @@ def test_initialize(
|
|||||||
assert server._api is not None
|
assert server._api is not None
|
||||||
|
|
||||||
|
|
||||||
def test_completions_invoked(
|
@pytest.mark.parametrize(
|
||||||
client_server: Tuple[LanguageServer, CMakeLanguageServer], datadir: Path
|
"context", [CompletionContext(trigger_kind=CompletionTriggerKind.Invoked), None]
|
||||||
) -> None:
|
|
||||||
response = _test_completion(
|
|
||||||
client_server,
|
|
||||||
datadir,
|
|
||||||
"projec",
|
|
||||||
CompletionContext(trigger_kind=CompletionTriggerKind.Invoked),
|
|
||||||
)
|
)
|
||||||
item = next(filter(lambda x: x["label"] == "project", response["items"]), None)
|
def test_completions(
|
||||||
|
context: Optional[CompletionContext],
|
||||||
|
client_server: Tuple[LanguageServer, CMakeLanguageServer],
|
||||||
|
datadir: Path,
|
||||||
|
) -> None:
|
||||||
|
response = _test_completion(client_server, datadir, "projec", context)
|
||||||
|
item = next(filter(lambda x: x.label == "project", response.items), None)
|
||||||
assert item is not None
|
assert item is not None
|
||||||
assert isinstance(item["documentation"], str)
|
assert isinstance(item.documentation, str)
|
||||||
assert "<PROJECT-NAME>" in item["documentation"]
|
assert "<PROJECT-NAME>" in item.documentation
|
||||||
|
|
||||||
|
|
||||||
def test_completions_nocontext(
|
@pytest.mark.parametrize(
|
||||||
client_server: Tuple[LanguageServer, CMakeLanguageServer], datadir: Path
|
"text, item",
|
||||||
) -> None:
|
[("find_package(", "Boost"), ("include(", "GoogleTest"), ("${", "PROJECT_VERSION")],
|
||||||
response = _test_completion(client_server, datadir, "projec", None)
|
)
|
||||||
item = next(filter(lambda x: x["label"] == "project", response["items"]), None)
|
def test_completions_triggercharacter(
|
||||||
assert item is not None
|
text: str,
|
||||||
assert isinstance(item["documentation"], str)
|
item: str,
|
||||||
assert "<PROJECT-NAME>" in item["documentation"]
|
client_server: Tuple[LanguageServer, CMakeLanguageServer],
|
||||||
|
datadir: Path,
|
||||||
|
|
||||||
def test_completions_triggercharacter_variable(
|
|
||||||
client_server: Tuple[LanguageServer, CMakeLanguageServer], datadir: Path
|
|
||||||
) -> None:
|
) -> None:
|
||||||
response = _test_completion(
|
response = _test_completion(
|
||||||
client_server,
|
client_server,
|
||||||
datadir,
|
datadir,
|
||||||
"${",
|
text,
|
||||||
CompletionContext(
|
CompletionContext(
|
||||||
trigger_kind=CompletionTriggerKind.TriggerCharacter, trigger_character="{"
|
trigger_kind=CompletionTriggerKind.TriggerCharacter,
|
||||||
|
trigger_character=text[-1],
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
assert "PROJECT_VERSION" in [x["label"] for x in response["items"]]
|
assert item in [x.label for x in response.items]
|
||||||
|
|
||||||
response_nocontext = _test_completion(client_server, datadir, "${", None)
|
response_nocontext = _test_completion(client_server, datadir, text, None)
|
||||||
assert response == response_nocontext
|
|
||||||
|
|
||||||
|
|
||||||
def test_completions_triggercharacter_module(
|
|
||||||
client_server: Tuple[LanguageServer, CMakeLanguageServer], datadir: Path
|
|
||||||
) -> None:
|
|
||||||
response = _test_completion(
|
|
||||||
client_server,
|
|
||||||
datadir,
|
|
||||||
"include(",
|
|
||||||
CompletionContext(
|
|
||||||
trigger_kind=CompletionTriggerKind.TriggerCharacter, trigger_character="("
|
|
||||||
),
|
|
||||||
)
|
|
||||||
assert "GoogleTest" in [x["label"] for x in response["items"]]
|
|
||||||
|
|
||||||
response_nocontext = _test_completion(client_server, datadir, "include(", None)
|
|
||||||
assert response == response_nocontext
|
|
||||||
|
|
||||||
|
|
||||||
def test_completions_triggercharacter_package(
|
|
||||||
client_server: Tuple[LanguageServer, CMakeLanguageServer], datadir: Path
|
|
||||||
) -> None:
|
|
||||||
response = _test_completion(
|
|
||||||
client_server,
|
|
||||||
datadir,
|
|
||||||
"find_package(",
|
|
||||||
CompletionContext(
|
|
||||||
trigger_kind=CompletionTriggerKind.TriggerCharacter, trigger_character="("
|
|
||||||
),
|
|
||||||
)
|
|
||||||
assert "Boost" in [x["label"] for x in response["items"]]
|
|
||||||
|
|
||||||
response_nocontext = _test_completion(client_server, datadir, "find_package(", None)
|
|
||||||
assert response == response_nocontext
|
assert response == response_nocontext
|
||||||
|
|
||||||
|
|
||||||
@@ -178,14 +141,14 @@ def test_formatting(
|
|||||||
_init(client, datadir)
|
_init(client, datadir)
|
||||||
path = datadir / "CMakeLists.txt"
|
path = datadir / "CMakeLists.txt"
|
||||||
_open(client, path, "a ( b c ) ")
|
_open(client, path, "a ( b c ) ")
|
||||||
response = client.lsp.send_request(
|
response = client.lsp.send_request( # type:ignore[no-untyped-call]
|
||||||
FORMATTING,
|
TEXT_DOCUMENT_FORMATTING,
|
||||||
DocumentFormattingParams(
|
DocumentFormattingParams(
|
||||||
text_document=TextDocumentIdentifier(uri=path.as_uri()),
|
text_document=TextDocumentIdentifier(uri=path.as_uri()),
|
||||||
options=FormattingOptions(tab_size=2, insert_spaces=True),
|
options=FormattingOptions(tab_size=2, insert_spaces=True),
|
||||||
),
|
),
|
||||||
).result(timeout=CALL_TIMEOUT)
|
).result(timeout=CALL_TIMEOUT)
|
||||||
assert response[0]["newText"] == "a(b c)\n"
|
assert response[0].new_text == "a(b c)\n"
|
||||||
|
|
||||||
|
|
||||||
def test_hover(
|
def test_hover(
|
||||||
@@ -195,11 +158,11 @@ def test_hover(
|
|||||||
_init(client, datadir)
|
_init(client, datadir)
|
||||||
path = datadir / "CMakeLists.txt"
|
path = datadir / "CMakeLists.txt"
|
||||||
_open(client, path, "project()")
|
_open(client, path, "project()")
|
||||||
response = client.lsp.send_request(
|
response = client.lsp.send_request( # type:ignore[no-untyped-call]
|
||||||
HOVER,
|
TEXT_DOCUMENT_HOVER,
|
||||||
TextDocumentPositionParams(
|
HoverParams(
|
||||||
text_document=TextDocumentIdentifier(uri=path.as_uri()),
|
text_document=TextDocumentIdentifier(uri=path.as_uri()),
|
||||||
position=Position(line=0, character=0),
|
position=Position(line=0, character=0),
|
||||||
),
|
),
|
||||||
).result(timeout=CALL_TIMEOUT)
|
).result(timeout=CALL_TIMEOUT)
|
||||||
assert "<PROJECT-NAME>" in response["contents"]["value"]
|
assert "<PROJECT-NAME>" in response.contents.value
|
||||||
|
|||||||
34
tox.ini
34
tox.ini
@@ -1,38 +1,22 @@
|
|||||||
[tox]
|
[tox]
|
||||||
|
env_list = py{37,38,39,310,311}
|
||||||
isolated_build = True
|
isolated_build = True
|
||||||
skipsdist = True
|
passenv = *
|
||||||
envlist = py{36,37,38,39,310}-{linux,windows}
|
setenv =
|
||||||
|
PDM_IGNORE_SAVED_PYTHON="1"
|
||||||
|
|
||||||
[gh-actions]
|
[gh-actions]
|
||||||
python =
|
python =
|
||||||
3.6: py36
|
|
||||||
3.7: py37
|
3.7: py37
|
||||||
3.8: py38
|
3.8: py38
|
||||||
3.9: py39
|
3.9: py39
|
||||||
3.10: py310
|
3.10: py310
|
||||||
|
3.11: py311
|
||||||
[gh-actions:env]
|
|
||||||
os =
|
|
||||||
ubuntu-18.04: linux
|
|
||||||
windows-2019: windows
|
|
||||||
|
|
||||||
[testenv]
|
[testenv]
|
||||||
allowlist_externals =
|
allowlist_externals =
|
||||||
poetry
|
pdm
|
||||||
git
|
|
||||||
skip_install = true
|
|
||||||
passenv = *
|
|
||||||
commands_pre =
|
|
||||||
poetry install
|
|
||||||
commands =
|
commands =
|
||||||
pytest --cov-report=term --cov-report=xml --cov=src -sv tests
|
pdm install --dev -G :all
|
||||||
|
pdm run lint
|
||||||
pip install "pysen[lint]"
|
pdm run test
|
||||||
pip install "black>=22.3.0"
|
|
||||||
pysen run format
|
|
||||||
git diff --exit-code --ignore-submodules
|
|
||||||
pysen run lint
|
|
||||||
|
|
||||||
[testenv:py310-windows]
|
|
||||||
commands =
|
|
||||||
pytest --cov-report=term --cov-report=xml --cov=src -sv tests
|
|
||||||
|
|||||||
Reference in New Issue
Block a user