Skip to content

Commit b8506d2

Browse files
committed
Implement formatting.
1 parent de83ef9 commit b8506d2

File tree

2 files changed

+27
-18
lines changed

2 files changed

+27
-18
lines changed

formate_trailing_commas/__init__.py

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,16 @@
2727
#
2828

2929
# stdlib
30-
import itertools
31-
from collections.abc import Mapping
32-
from typing import Optional
30+
from ast import Tuple
3331

3432
# 3rd party
35-
from domdf_python_tools.paths import PathPlus
36-
from domdf_python_tools.typing import PathLike
37-
from domdf_python_tools.words import TAB
38-
from formate.config import wants_filename, wants_global_config
33+
from tokenize_rt import src_to_tokens, tokens_to_src
34+
35+
# this package
36+
from formate_trailing_commas._vendor.add_trailing_comma._ast_helpers import ast_parse
37+
from formate_trailing_commas._vendor.add_trailing_comma._data import FUNCS, visit
38+
from formate_trailing_commas._vendor.add_trailing_comma._main import _changing_list, _fix_src
39+
from formate_trailing_commas._vendor.add_trailing_comma._token_helpers import START_BRACES, find_simple, fix_brace
3940

4041
__author__: str = "Dominic Davis-Foster"
4142
__copyright__: str = "2026 Dominic Davis-Foster"
@@ -46,22 +47,31 @@
4647
__all__ = ["trailing_commas_hook"]
4748

4849

49-
@wants_filename
50-
@wants_global_config
51-
def trailing_commas_hook(
52-
source: str,
53-
formate_filename: PathLike,
54-
formate_global_config: Optional[Mapping] = None,
55-
**kwargs,
56-
) -> str:
50+
def trailing_commas_hook(source: str, **kwargs) -> str:
5751
r"""
5852
Call `add-trailing-comma <https://github.com/asottile/add-trailing-comma>`_, using the given keyword arguments as its configuration.
5953
6054
:param source: The source to reformat.
61-
:param formate_global_config: The global configuration dictionary. Optional.
6255
:param \*\*kwargs:
6356
6457
:returns: The reformatted source.
6558
"""
6659

67-
# TODO
60+
ast_obj = ast_parse(source)
61+
min_version: Tuple[int, int] = kwargs.get("min-version", (3, 6))
62+
63+
callbacks = visit(FUNCS, ast_obj, min_version)
64+
65+
tokens = src_to_tokens(source)
66+
for i, token in _changing_list(tokens):
67+
# DEDENT is a zero length token
68+
if not token.src:
69+
continue
70+
71+
for callback in callbacks.get(token.offset, ()):
72+
callback(i, tokens)
73+
74+
if token.src in START_BRACES:
75+
fix_brace(tokens, find_simple(i, tokens), add_comma=False, remove_comma=False)
76+
77+
return tokens_to_src(tokens)

requirements.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,2 @@
1-
domdf-python-tools>=2.9.1
21
formate>=0.4.4
32
tokenize-rt>=3.0.1

0 commit comments

Comments
 (0)