The following issues were found
coq/lang.py
7 issues
Line: 5
Column: 1
from string import Template
from typing import Mapping, MutableMapping, Optional, Union
from std2.pickle import new_decoder
from yaml import safe_load
from .consts import DEFAULT_LANG, LANG_ROOT
Reported by Pylint.
Line: 8
Column: 1
from std2.pickle import new_decoder
from yaml import safe_load
from .consts import DEFAULT_LANG, LANG_ROOT
def _get_lang(code: Optional[str], fallback: str) -> str:
if code:
return code.casefold()
Reported by Pylint.
Line: 46
Column: 5
specs: Mapping[str, str] = new_decoder(Mapping[str, str])(
safe_load(yml_path.read_text("UTF-8"))
)
LANG._specs.update(specs)
init(None)
Reported by Pylint.
Line: 1
Column: 1
from locale import getdefaultlocale
from string import Template
from typing import Mapping, MutableMapping, Optional, Union
from std2.pickle import new_decoder
from yaml import safe_load
from .consts import DEFAULT_LANG, LANG_ROOT
Reported by Pylint.
Line: 12
Column: 5
def _get_lang(code: Optional[str], fallback: str) -> str:
if code:
return code.casefold()
else:
tag, _ = getdefaultlocale()
tag = (tag or fallback).casefold()
primary, _, _ = tag.partition("-")
Reported by Pylint.
Line: 22
Column: 1
return lang
class _Lang:
def __init__(self, specs: MutableMapping[str, str]) -> None:
self._specs = specs
def __call__(self, key: str, **kwds: Union[int, float, str]) -> str:
spec = self._specs[key]
Reported by Pylint.
Line: 34
Column: 1
LANG = _Lang({})
def init(code: Optional[str]) -> None:
lang = _get_lang(code, fallback=DEFAULT_LANG)
lang_path = (LANG_ROOT / lang).with_suffix(".yml")
yml_path = (
lang_path
if lang_path.exists()
Reported by Pylint.
coq/shared/lru.py
7 issues
Line: 9
Column: 5
class LRU(UserDict, Generic[K, V]):
def __init__(self, size: int) -> None:
assert size > 0
self._size = size
self.data = OrderedDict()
def __setitem__(self, key: K, item: V) -> None:
Reported by Pylint.
Line: 1
Column: 1
from collections import OrderedDict, UserDict
from typing import Generic, TypeVar, cast
K = TypeVar("K")
V = TypeVar("V")
class LRU(UserDict, Generic[K, V]):
def __init__(self, size: int) -> None:
Reported by Pylint.
Line: 4
Column: 1
from collections import OrderedDict, UserDict
from typing import Generic, TypeVar, cast
K = TypeVar("K")
V = TypeVar("V")
class LRU(UserDict, Generic[K, V]):
def __init__(self, size: int) -> None:
Reported by Pylint.
Line: 5
Column: 1
from typing import Generic, TypeVar, cast
K = TypeVar("K")
V = TypeVar("V")
class LRU(UserDict, Generic[K, V]):
def __init__(self, size: int) -> None:
assert size > 0
Reported by Pylint.
Line: 8
Column: 1
V = TypeVar("V")
class LRU(UserDict, Generic[K, V]):
def __init__(self, size: int) -> None:
assert size > 0
self._size = size
self.data = OrderedDict()
Reported by Pylint.
Line: 8
Column: 1
V = TypeVar("V")
class LRU(UserDict, Generic[K, V]):
def __init__(self, size: int) -> None:
assert size > 0
self._size = size
self.data = OrderedDict()
Reported by Pylint.
Line: 10
Suggestion:
https://bandit.readthedocs.io/en/latest/plugins/b101_assert_used.html
class LRU(UserDict, Generic[K, V]):
def __init__(self, size: int) -> None:
assert size > 0
self._size = size
self.data = OrderedDict()
def __setitem__(self, key: K, item: V) -> None:
if len(self) >= self._size:
Reported by Bandit.
coq/ci/main.py
7 issues
Line: 5
Column: 1
from json import dumps
from typing import Any
from std2.tree import recur_sort
from ..consts import LSP_ARTIFACTS, VARS
from .load import load_parsable
from .lsp import lsp
Reported by Pylint.
Line: 7
Column: 1
from std2.tree import recur_sort
from ..consts import LSP_ARTIFACTS, VARS
from .load import load_parsable
from .lsp import lsp
_SNIPPET_ARTIFACTS = VARS / "snippets" / "coq+snippets.json"
Reported by Pylint.
Line: 8
Column: 1
from std2.tree import recur_sort
from ..consts import LSP_ARTIFACTS, VARS
from .load import load_parsable
from .lsp import lsp
_SNIPPET_ARTIFACTS = VARS / "snippets" / "coq+snippets.json"
Reported by Pylint.
Line: 9
Column: 1
from ..consts import LSP_ARTIFACTS, VARS
from .load import load_parsable
from .lsp import lsp
_SNIPPET_ARTIFACTS = VARS / "snippets" / "coq+snippets.json"
def _json(o: Any) -> str:
Reported by Pylint.
Line: 1
Column: 1
from asyncio.tasks import gather
from json import dumps
from typing import Any
from std2.tree import recur_sort
from ..consts import LSP_ARTIFACTS, VARS
from .load import load_parsable
from .lsp import lsp
Reported by Pylint.
Line: 14
Column: 1
_SNIPPET_ARTIFACTS = VARS / "snippets" / "coq+snippets.json"
def _json(o: Any) -> str:
json = dumps(recur_sort(o), check_circular=False, ensure_ascii=False, indent=2)
return json
async def main() -> None:
Reported by Pylint.
Line: 19
Column: 1
return json
async def main() -> None:
lsprotocol, snippets = await gather(lsp(), load_parsable())
j_lsp = _json(lsprotocol)
LSP_ARTIFACTS.write_text(j_lsp)
Reported by Pylint.
coq/lsp/protocol.py
7 issues
Line: 5
Column: 1
from json import loads
from typing import Mapping, Optional
from std2.pickle import new_decoder
from ..consts import LSP_ARTIFACTS
@dataclass(frozen=True)
Reported by Pylint.
Line: 7
Column: 1
from std2.pickle import new_decoder
from ..consts import LSP_ARTIFACTS
@dataclass(frozen=True)
class LSProtocol:
CompletionItemKind: Mapping[Optional[int], str]
Reported by Pylint.
Line: 1
Column: 1
from dataclasses import dataclass
from json import loads
from typing import Mapping, Optional
from std2.pickle import new_decoder
from ..consts import LSP_ARTIFACTS
Reported by Pylint.
Line: 11
Column: 1
@dataclass(frozen=True)
class LSProtocol:
CompletionItemKind: Mapping[Optional[int], str]
InsertTextFormat: Mapping[Optional[int], str]
def _load() -> LSProtocol:
Reported by Pylint.
Line: 12
Column: 5
@dataclass(frozen=True)
class LSProtocol:
CompletionItemKind: Mapping[Optional[int], str]
InsertTextFormat: Mapping[Optional[int], str]
def _load() -> LSProtocol:
raw = LSP_ARTIFACTS.read_text("UTF-8")
Reported by Pylint.
Line: 13
Column: 5
@dataclass(frozen=True)
class LSProtocol:
CompletionItemKind: Mapping[Optional[int], str]
InsertTextFormat: Mapping[Optional[int], str]
def _load() -> LSProtocol:
raw = LSP_ARTIFACTS.read_text("UTF-8")
json: Mapping[str, Mapping[str, int]] = loads(raw)
Reported by Pylint.
Line: 20
Column: 5
raw = LSP_ARTIFACTS.read_text("UTF-8")
json: Mapping[str, Mapping[str, int]] = loads(raw)
trans = {key: {v: k for k, v in val.items()} for key, val in json.items()}
p: LSProtocol = new_decoder(LSProtocol, strict=False)(trans)
return p
PROTOCOL = _load()
Reported by Pylint.
coq/clients/t9/types.py
6 issues
Line: 1
Column: 1
from dataclasses import dataclass
from typing import Optional, Sequence
@dataclass(frozen=True)
class ReqL2:
before: str
after: str
filename: str
Reported by Pylint.
Line: 6
Column: 1
@dataclass(frozen=True)
class ReqL2:
before: str
after: str
filename: str
region_includes_beginning: bool
region_includes_end: bool
Reported by Pylint.
Line: 16
Column: 1
@dataclass(frozen=True)
class ReqL1:
Autocomplete: ReqL2
@dataclass(frozen=True)
class Request:
Reported by Pylint.
Line: 17
Column: 5
@dataclass(frozen=True)
class ReqL1:
Autocomplete: ReqL2
@dataclass(frozen=True)
class Request:
request: ReqL1
Reported by Pylint.
Line: 21
Column: 1
@dataclass(frozen=True)
class Request:
request: ReqL1
version: str
@dataclass(frozen=True)
Reported by Pylint.
Line: 34
Column: 1
@dataclass(frozen=True)
class Response:
old_prefix: str
results: Sequence[_RespL1]
Reported by Pylint.
coq/lsp/types.py
6 issues
Line: 4
Column: 1
from dataclasses import dataclass
from typing import Iterator, Literal, Optional, Sequence, TypedDict, Union
from ..shared.types import Completion
# https://microsoft.github.io/language-server-protocol/specification
class _Position(TypedDict):
Reported by Pylint.
Line: 1
Column: 1
from dataclasses import dataclass
from typing import Iterator, Literal, Optional, Sequence, TypedDict, Union
from ..shared.types import Completion
# https://microsoft.github.io/language-server-protocol/specification
class _Position(TypedDict):
Reported by Pylint.
Line: 19
Column: 1
end: _Position
class TextEdit(TypedDict):
newText: str
range: _Range
class InsertReplaceEdit(TypedDict):
Reported by Pylint.
Line: 24
Column: 1
range: _Range
class InsertReplaceEdit(TypedDict):
newText: str
insert: _Range
replace: _Range
Reported by Pylint.
Line: 41
Column: 1
_InsertTextFormat = int
class CompletionItem(TypedDict):
label: str
additionalTextEdits: Optional[Sequence[TextEdit]]
detail: Optional[str]
documentation: Union[str, _MarkupContent, None]
filterText: Optional[str]
Reported by Pylint.
Line: 64
Column: 1
@dataclass(frozen=True)
class LSPcomp:
local_cache: bool
items: Iterator[Completion]
Reported by Pylint.
coq/snippets/loaders/lsp.py
6 issues
Line: 7
Column: 1
from pathlib import Path
from typing import AbstractSet, Iterator, Mapping, Sequence, Tuple, Union
from std2.pickle import new_decoder
from ..types import ParsedSnippet
@dataclass
Reported by Pylint.
Line: 9
Column: 1
from std2.pickle import new_decoder
from ..types import ParsedSnippet
@dataclass
class _Unit:
prefix: Union[str, Sequence[str]]
Reported by Pylint.
Line: 1
Column: 1
from dataclasses import dataclass
from json import loads
from os import linesep
from pathlib import Path
from typing import AbstractSet, Iterator, Mapping, Sequence, Tuple, Union
from std2.pickle import new_decoder
from ..types import ParsedSnippet
Reported by Pylint.
Line: 24
Column: 5
def _prefix(prefix: Union[str, Sequence[str]]) -> AbstractSet[str]:
if isinstance(prefix, str):
return {prefix}
elif isinstance(prefix, Sequence):
return {*prefix}
else:
raise ValueError(prefix)
Reported by Pylint.
Line: 33
Column: 5
def _body(body: Union[str, Sequence[str]]) -> str:
if isinstance(body, str):
return body
elif isinstance(body, Sequence):
return linesep.join(body)
else:
raise ValueError(body)
Reported by Pylint.
Line: 41
Column: 1
raise ValueError(body)
def parse(path: Path) -> Tuple[AbstractSet[str], Sequence[ParsedSnippet]]:
text = path.read_text("UTF-8") if path.exists() else ""
json = loads(text)
fmt: _FMT = _DECODER(json)
def cont() -> Iterator[ParsedSnippet]:
Reported by Pylint.
tests/tags/parser.py
5 issues
Line: 6
Column: 1
from shutil import get_terminal_size
from unittest import IsolatedAsyncioTestCase
from ...coq.consts import TMP_DIR
from ...coq.tags.parse import parse, run
class Parser(IsolatedAsyncioTestCase):
async def test_1(self) -> None:
Reported by Pylint.
Line: 7
Column: 1
from unittest import IsolatedAsyncioTestCase
from ...coq.consts import TMP_DIR
from ...coq.tags.parse import parse, run
class Parser(IsolatedAsyncioTestCase):
async def test_1(self) -> None:
tag = TMP_DIR / "TAG"
Reported by Pylint.
Line: 1
Column: 1
from itertools import islice
from os import linesep
from shutil import get_terminal_size
from unittest import IsolatedAsyncioTestCase
from ...coq.consts import TMP_DIR
from ...coq.tags.parse import parse, run
Reported by Pylint.
Line: 10
Column: 1
from ...coq.tags.parse import parse, run
class Parser(IsolatedAsyncioTestCase):
async def test_1(self) -> None:
tag = TMP_DIR / "TAG"
TMP_DIR.mkdir(parents=True, exist_ok=True)
if not tag.exists():
text = await run("--recurse")
Reported by Pylint.
Line: 11
Column: 5
class Parser(IsolatedAsyncioTestCase):
async def test_1(self) -> None:
tag = TMP_DIR / "TAG"
TMP_DIR.mkdir(parents=True, exist_ok=True)
if not tag.exists():
text = await run("--recurse")
tag.write_text(text)
Reported by Pylint.
coq/registry.py
5 issues
Line: 3
Column: 1
from typing import Any, Callable
from pynvim_pp.atomic import Atomic
from pynvim_pp.autocmd import AutoCMD
from pynvim_pp.rpc import RPC
def _name_gen(fn: Callable[[Callable[..., Any]], str]) -> str:
return f"COQ{fn.__qualname__.lstrip('_')}"
Reported by Pylint.
Line: 4
Column: 1
from typing import Any, Callable
from pynvim_pp.atomic import Atomic
from pynvim_pp.autocmd import AutoCMD
from pynvim_pp.rpc import RPC
def _name_gen(fn: Callable[[Callable[..., Any]], str]) -> str:
return f"COQ{fn.__qualname__.lstrip('_')}"
Reported by Pylint.
Line: 5
Column: 1
from pynvim_pp.atomic import Atomic
from pynvim_pp.autocmd import AutoCMD
from pynvim_pp.rpc import RPC
def _name_gen(fn: Callable[[Callable[..., Any]], str]) -> str:
return f"COQ{fn.__qualname__.lstrip('_')}"
Reported by Pylint.
Line: 1
Column: 1
from typing import Any, Callable
from pynvim_pp.atomic import Atomic
from pynvim_pp.autocmd import AutoCMD
from pynvim_pp.rpc import RPC
def _name_gen(fn: Callable[[Callable[..., Any]], str]) -> str:
return f"COQ{fn.__qualname__.lstrip('_')}"
Reported by Pylint.
Line: 8
Column: 1
from pynvim_pp.rpc import RPC
def _name_gen(fn: Callable[[Callable[..., Any]], str]) -> str:
return f"COQ{fn.__qualname__.lstrip('_')}"
autocmd = AutoCMD()
atomic = Atomic()
Reported by Pylint.
coq/snippets/main.py
5 issues
Line: 4
Column: 1
from argparse import ArgumentParser, Namespace
from sys import stdin
from ..shared.context import EMPTY_CONTEXT
from ..shared.types import SnippetEdit
from .parse import parse
def _parse_args() -> Namespace:
Reported by Pylint.
Line: 5
Column: 1
from sys import stdin
from ..shared.context import EMPTY_CONTEXT
from ..shared.types import SnippetEdit
from .parse import parse
def _parse_args() -> Namespace:
parser = ArgumentParser()
Reported by Pylint.
Line: 6
Column: 1
from ..shared.context import EMPTY_CONTEXT
from ..shared.types import SnippetEdit
from .parse import parse
def _parse_args() -> Namespace:
parser = ArgumentParser()
parser.add_argument("grammar", choices=("lsp", "snu"))
Reported by Pylint.
Line: 1
Column: 1
from argparse import ArgumentParser, Namespace
from sys import stdin
from ..shared.context import EMPTY_CONTEXT
from ..shared.types import SnippetEdit
from .parse import parse
def _parse_args() -> Namespace:
Reported by Pylint.
Line: 15
Column: 1
return parser.parse_args()
def main() -> None:
args = _parse_args()
edit = SnippetEdit(grammar=args.grammar, new_text=stdin.read())
parsed = parse(set(), context=EMPTY_CONTEXT, snippet=edit, sort_by="", visual="")
print(parsed)
Reported by Pylint.