kodit 0.3.2__py3-none-any.whl → 0.3.4__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of kodit might be problematic. Click here for more details.
- kodit/_version.py +2 -2
- kodit/application/factories/code_indexing_factory.py +56 -29
- kodit/application/services/code_indexing_application_service.py +152 -118
- kodit/cli.py +14 -41
- kodit/domain/entities.py +268 -197
- kodit/domain/protocols.py +61 -0
- kodit/domain/services/embedding_service.py +1 -1
- kodit/domain/services/index_query_service.py +66 -0
- kodit/domain/services/index_service.py +282 -0
- kodit/domain/value_objects.py +143 -65
- kodit/infrastructure/cloning/git/working_copy.py +17 -8
- kodit/infrastructure/cloning/metadata.py +37 -67
- kodit/infrastructure/embedding/embedding_factory.py +1 -1
- kodit/infrastructure/embedding/local_vector_search_repository.py +1 -1
- kodit/infrastructure/embedding/vectorchord_vector_search_repository.py +1 -1
- kodit/infrastructure/enrichment/null_enrichment_provider.py +4 -10
- kodit/infrastructure/git/git_utils.py +1 -63
- kodit/infrastructure/ignore/ignore_pattern_provider.py +1 -2
- kodit/infrastructure/indexing/auto_indexing_service.py +2 -12
- kodit/infrastructure/indexing/fusion_service.py +1 -1
- kodit/infrastructure/mappers/__init__.py +1 -0
- kodit/infrastructure/mappers/index_mapper.py +344 -0
- kodit/infrastructure/slicing/__init__.py +1 -0
- kodit/infrastructure/slicing/language_detection_service.py +18 -0
- kodit/infrastructure/slicing/slicer.py +894 -0
- kodit/infrastructure/sqlalchemy/embedding_repository.py +1 -1
- kodit/infrastructure/sqlalchemy/entities.py +203 -0
- kodit/infrastructure/sqlalchemy/index_repository.py +579 -0
- kodit/mcp.py +0 -7
- kodit/migrations/env.py +1 -1
- kodit/migrations/versions/4073b33f9436_add_file_processing_flag.py +36 -0
- kodit/migrations/versions/4552eb3f23ce_add_summary.py +4 -4
- kodit/migrations/versions/7c3bbc2ab32b_add_embeddings_table.py +24 -16
- kodit/migrations/versions/85155663351e_initial.py +64 -48
- kodit/migrations/versions/c3f5137d30f5_index_all_the_things.py +20 -14
- kodit/utils/__init__.py +1 -0
- kodit/utils/path_utils.py +54 -0
- {kodit-0.3.2.dist-info → kodit-0.3.4.dist-info}/METADATA +9 -4
- kodit-0.3.4.dist-info/RECORD +89 -0
- kodit/domain/enums.py +0 -9
- kodit/domain/repositories.py +0 -128
- kodit/domain/services/ignore_service.py +0 -45
- kodit/domain/services/indexing_service.py +0 -204
- kodit/domain/services/snippet_extraction_service.py +0 -89
- kodit/domain/services/snippet_service.py +0 -215
- kodit/domain/services/source_service.py +0 -85
- kodit/infrastructure/cloning/folder/__init__.py +0 -1
- kodit/infrastructure/cloning/folder/factory.py +0 -128
- kodit/infrastructure/cloning/folder/working_copy.py +0 -38
- kodit/infrastructure/cloning/git/factory.py +0 -153
- kodit/infrastructure/indexing/index_repository.py +0 -286
- kodit/infrastructure/indexing/snippet_domain_service_factory.py +0 -37
- kodit/infrastructure/snippet_extraction/__init__.py +0 -1
- kodit/infrastructure/snippet_extraction/language_detection_service.py +0 -39
- kodit/infrastructure/snippet_extraction/languages/csharp.scm +0 -12
- kodit/infrastructure/snippet_extraction/languages/go.scm +0 -26
- kodit/infrastructure/snippet_extraction/languages/java.scm +0 -12
- kodit/infrastructure/snippet_extraction/languages/javascript.scm +0 -24
- kodit/infrastructure/snippet_extraction/languages/python.scm +0 -22
- kodit/infrastructure/snippet_extraction/languages/typescript.scm +0 -25
- kodit/infrastructure/snippet_extraction/snippet_extraction_factory.py +0 -67
- kodit/infrastructure/snippet_extraction/snippet_query_provider.py +0 -45
- kodit/infrastructure/snippet_extraction/tree_sitter_snippet_extractor.py +0 -182
- kodit/infrastructure/sqlalchemy/file_repository.py +0 -78
- kodit/infrastructure/sqlalchemy/repository.py +0 -133
- kodit/infrastructure/sqlalchemy/snippet_repository.py +0 -259
- kodit-0.3.2.dist-info/RECORD +0 -103
- {kodit-0.3.2.dist-info → kodit-0.3.4.dist-info}/WHEEL +0 -0
- {kodit-0.3.2.dist-info → kodit-0.3.4.dist-info}/entry_points.txt +0 -0
- {kodit-0.3.2.dist-info → kodit-0.3.4.dist-info}/licenses/LICENSE +0 -0
|
@@ -14,8 +14,8 @@ import sqlalchemy as sa
|
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
# revision identifiers, used by Alembic.
|
|
17
|
-
revision: str =
|
|
18
|
-
down_revision: Union[str, None] =
|
|
17
|
+
revision: str = "7c3bbc2ab32b"
|
|
18
|
+
down_revision: Union[str, None] = "85155663351e"
|
|
19
19
|
branch_labels: Union[str, Sequence[str], None] = None
|
|
20
20
|
depends_on: Union[str, Sequence[str], None] = None
|
|
21
21
|
|
|
@@ -23,25 +23,33 @@ depends_on: Union[str, Sequence[str], None] = None
|
|
|
23
23
|
def upgrade() -> None:
|
|
24
24
|
"""Upgrade schema."""
|
|
25
25
|
# ### commands auto generated by Alembic - please adjust! ###
|
|
26
|
-
op.create_table(
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
26
|
+
op.create_table(
|
|
27
|
+
"embeddings",
|
|
28
|
+
sa.Column("snippet_id", sa.Integer(), nullable=False),
|
|
29
|
+
sa.Column(
|
|
30
|
+
"type", sa.Enum("CODE", "TEXT", name="embeddingtype"), nullable=False
|
|
31
|
+
),
|
|
32
|
+
sa.Column("embedding", sa.JSON(), nullable=False),
|
|
33
|
+
sa.Column("id", sa.Integer(), autoincrement=True, nullable=False),
|
|
34
|
+
sa.Column("created_at", sa.DateTime(), nullable=False),
|
|
35
|
+
sa.Column("updated_at", sa.DateTime(), nullable=False),
|
|
36
|
+
sa.ForeignKeyConstraint(
|
|
37
|
+
["snippet_id"],
|
|
38
|
+
["snippets.id"],
|
|
39
|
+
),
|
|
40
|
+
sa.PrimaryKeyConstraint("id"),
|
|
35
41
|
)
|
|
36
|
-
op.create_index(
|
|
37
|
-
|
|
42
|
+
op.create_index(
|
|
43
|
+
op.f("ix_embeddings_snippet_id"), "embeddings", ["snippet_id"], unique=False
|
|
44
|
+
)
|
|
45
|
+
op.create_index(op.f("ix_embeddings_type"), "embeddings", ["type"], unique=False)
|
|
38
46
|
# ### end Alembic commands ###
|
|
39
47
|
|
|
40
48
|
|
|
41
49
|
def downgrade() -> None:
|
|
42
50
|
"""Downgrade schema."""
|
|
43
51
|
# ### commands auto generated by Alembic - please adjust! ###
|
|
44
|
-
op.drop_index(op.f(
|
|
45
|
-
op.drop_index(op.f(
|
|
46
|
-
op.drop_table(
|
|
52
|
+
op.drop_index(op.f("ix_embeddings_type"), table_name="embeddings")
|
|
53
|
+
op.drop_index(op.f("ix_embeddings_snippet_id"), table_name="embeddings")
|
|
54
|
+
op.drop_table("embeddings")
|
|
47
55
|
# ### end Alembic commands ###
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"""initial
|
|
3
3
|
|
|
4
4
|
Revision ID: 85155663351e
|
|
5
|
-
Revises:
|
|
5
|
+
Revises:
|
|
6
6
|
Create Date: 2025-05-08 13:45:16.687162
|
|
7
7
|
|
|
8
8
|
"""
|
|
@@ -14,7 +14,7 @@ import sqlalchemy as sa
|
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
# revision identifiers, used by Alembic.
|
|
17
|
-
revision: str =
|
|
17
|
+
revision: str = "85155663351e"
|
|
18
18
|
down_revision: Union[str, None] = None
|
|
19
19
|
branch_labels: Union[str, Sequence[str], None] = None
|
|
20
20
|
depends_on: Union[str, Sequence[str], None] = None
|
|
@@ -23,48 +23,64 @@ depends_on: Union[str, Sequence[str], None] = None
|
|
|
23
23
|
def upgrade() -> None:
|
|
24
24
|
"""Upgrade schema."""
|
|
25
25
|
# ### commands auto generated by Alembic - please adjust! ###
|
|
26
|
-
op.create_table(
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
26
|
+
op.create_table(
|
|
27
|
+
"sources",
|
|
28
|
+
sa.Column("uri", sa.String(length=1024), nullable=False),
|
|
29
|
+
sa.Column("cloned_path", sa.String(length=1024), nullable=False),
|
|
30
|
+
sa.Column("id", sa.Integer(), autoincrement=True, nullable=False),
|
|
31
|
+
sa.Column("created_at", sa.DateTime(), nullable=False),
|
|
32
|
+
sa.Column("updated_at", sa.DateTime(), nullable=False),
|
|
33
|
+
sa.PrimaryKeyConstraint("id"),
|
|
33
34
|
)
|
|
34
|
-
op.create_index(op.f(
|
|
35
|
-
op.create_table(
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
35
|
+
op.create_index(op.f("ix_sources_uri"), "sources", ["uri"], unique=True)
|
|
36
|
+
op.create_table(
|
|
37
|
+
"files",
|
|
38
|
+
sa.Column("source_id", sa.Integer(), nullable=False),
|
|
39
|
+
sa.Column("mime_type", sa.String(length=255), nullable=False),
|
|
40
|
+
sa.Column("uri", sa.String(length=1024), nullable=False),
|
|
41
|
+
sa.Column("cloned_path", sa.String(length=1024), nullable=False),
|
|
42
|
+
sa.Column("sha256", sa.String(length=64), nullable=False),
|
|
43
|
+
sa.Column("size_bytes", sa.Integer(), nullable=False),
|
|
44
|
+
sa.Column("id", sa.Integer(), autoincrement=True, nullable=False),
|
|
45
|
+
sa.Column("created_at", sa.DateTime(), nullable=False),
|
|
46
|
+
sa.Column("updated_at", sa.DateTime(), nullable=False),
|
|
47
|
+
sa.ForeignKeyConstraint(
|
|
48
|
+
["source_id"],
|
|
49
|
+
["sources.id"],
|
|
50
|
+
),
|
|
51
|
+
sa.PrimaryKeyConstraint("id"),
|
|
47
52
|
)
|
|
48
|
-
op.create_index(op.f(
|
|
49
|
-
op.create_table(
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
53
|
+
op.create_index(op.f("ix_files_sha256"), "files", ["sha256"], unique=False)
|
|
54
|
+
op.create_table(
|
|
55
|
+
"indexes",
|
|
56
|
+
sa.Column("source_id", sa.Integer(), nullable=False),
|
|
57
|
+
sa.Column("id", sa.Integer(), autoincrement=True, nullable=False),
|
|
58
|
+
sa.Column("created_at", sa.DateTime(), nullable=False),
|
|
59
|
+
sa.Column("updated_at", sa.DateTime(), nullable=False),
|
|
60
|
+
sa.ForeignKeyConstraint(
|
|
61
|
+
["source_id"],
|
|
62
|
+
["sources.id"],
|
|
63
|
+
),
|
|
64
|
+
sa.PrimaryKeyConstraint("id"),
|
|
56
65
|
)
|
|
57
|
-
op.create_index(op.f(
|
|
58
|
-
op.create_table(
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
66
|
+
op.create_index(op.f("ix_indexes_source_id"), "indexes", ["source_id"], unique=True)
|
|
67
|
+
op.create_table(
|
|
68
|
+
"snippets",
|
|
69
|
+
sa.Column("file_id", sa.Integer(), nullable=False),
|
|
70
|
+
sa.Column("index_id", sa.Integer(), nullable=False),
|
|
71
|
+
sa.Column("content", sa.UnicodeText(), nullable=False),
|
|
72
|
+
sa.Column("id", sa.Integer(), autoincrement=True, nullable=False),
|
|
73
|
+
sa.Column("created_at", sa.DateTime(), nullable=False),
|
|
74
|
+
sa.Column("updated_at", sa.DateTime(), nullable=False),
|
|
75
|
+
sa.ForeignKeyConstraint(
|
|
76
|
+
["file_id"],
|
|
77
|
+
["files.id"],
|
|
78
|
+
),
|
|
79
|
+
sa.ForeignKeyConstraint(
|
|
80
|
+
["index_id"],
|
|
81
|
+
["indexes.id"],
|
|
82
|
+
),
|
|
83
|
+
sa.PrimaryKeyConstraint("id"),
|
|
68
84
|
)
|
|
69
85
|
# ### end Alembic commands ###
|
|
70
86
|
|
|
@@ -72,11 +88,11 @@ def upgrade() -> None:
|
|
|
72
88
|
def downgrade() -> None:
|
|
73
89
|
"""Downgrade schema."""
|
|
74
90
|
# ### commands auto generated by Alembic - please adjust! ###
|
|
75
|
-
op.drop_table(
|
|
76
|
-
op.drop_index(op.f(
|
|
77
|
-
op.drop_table(
|
|
78
|
-
op.drop_index(op.f(
|
|
79
|
-
op.drop_table(
|
|
80
|
-
op.drop_index(op.f(
|
|
81
|
-
op.drop_table(
|
|
91
|
+
op.drop_table("snippets")
|
|
92
|
+
op.drop_index(op.f("ix_indexes_source_id"), table_name="indexes")
|
|
93
|
+
op.drop_table("indexes")
|
|
94
|
+
op.drop_index(op.f("ix_files_sha256"), table_name="files")
|
|
95
|
+
op.drop_table("files")
|
|
96
|
+
op.drop_index(op.f("ix_sources_uri"), table_name="sources")
|
|
97
|
+
op.drop_table("sources")
|
|
82
98
|
# ### end Alembic commands ###
|
|
@@ -14,8 +14,8 @@ import sqlalchemy as sa
|
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
# revision identifiers, used by Alembic.
|
|
17
|
-
revision: str =
|
|
18
|
-
down_revision: Union[str, None] =
|
|
17
|
+
revision: str = "c3f5137d30f5"
|
|
18
|
+
down_revision: Union[str, None] = "7c3bbc2ab32b"
|
|
19
19
|
branch_labels: Union[str, Sequence[str], None] = None
|
|
20
20
|
depends_on: Union[str, Sequence[str], None] = None
|
|
21
21
|
|
|
@@ -23,22 +23,28 @@ depends_on: Union[str, Sequence[str], None] = None
|
|
|
23
23
|
def upgrade() -> None:
|
|
24
24
|
"""Upgrade schema."""
|
|
25
25
|
# ### commands auto generated by Alembic - please adjust! ###
|
|
26
|
-
op.create_index(
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
op.create_index(op.f(
|
|
30
|
-
op.create_index(op.f(
|
|
31
|
-
op.create_index(op.f(
|
|
26
|
+
op.create_index(
|
|
27
|
+
op.f("ix_files_cloned_path"), "files", ["cloned_path"], unique=False
|
|
28
|
+
)
|
|
29
|
+
op.create_index(op.f("ix_files_mime_type"), "files", ["mime_type"], unique=False)
|
|
30
|
+
op.create_index(op.f("ix_files_uri"), "files", ["uri"], unique=False)
|
|
31
|
+
op.create_index(op.f("ix_snippets_file_id"), "snippets", ["file_id"], unique=False)
|
|
32
|
+
op.create_index(
|
|
33
|
+
op.f("ix_snippets_index_id"), "snippets", ["index_id"], unique=False
|
|
34
|
+
)
|
|
35
|
+
op.create_index(
|
|
36
|
+
op.f("ix_sources_cloned_path"), "sources", ["cloned_path"], unique=False
|
|
37
|
+
)
|
|
32
38
|
# ### end Alembic commands ###
|
|
33
39
|
|
|
34
40
|
|
|
35
41
|
def downgrade() -> None:
|
|
36
42
|
"""Downgrade schema."""
|
|
37
43
|
# ### commands auto generated by Alembic - please adjust! ###
|
|
38
|
-
op.drop_index(op.f(
|
|
39
|
-
op.drop_index(op.f(
|
|
40
|
-
op.drop_index(op.f(
|
|
41
|
-
op.drop_index(op.f(
|
|
42
|
-
op.drop_index(op.f(
|
|
43
|
-
op.drop_index(op.f(
|
|
44
|
+
op.drop_index(op.f("ix_sources_cloned_path"), table_name="sources")
|
|
45
|
+
op.drop_index(op.f("ix_snippets_index_id"), table_name="snippets")
|
|
46
|
+
op.drop_index(op.f("ix_snippets_file_id"), table_name="snippets")
|
|
47
|
+
op.drop_index(op.f("ix_files_uri"), table_name="files")
|
|
48
|
+
op.drop_index(op.f("ix_files_mime_type"), table_name="files")
|
|
49
|
+
op.drop_index(op.f("ix_files_cloned_path"), table_name="files")
|
|
44
50
|
# ### end Alembic commands ###
|
kodit/utils/__init__.py
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Utility modules for Kodit."""
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"""Path utilities for Python compatibility."""
|
|
2
|
+
|
|
3
|
+
import sys
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
from urllib.parse import urlparse
|
|
6
|
+
from urllib.request import url2pathname
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def path_from_uri(uri: str) -> Path:
|
|
10
|
+
"""Convert a file URI to a Path object.
|
|
11
|
+
|
|
12
|
+
This provides backwards compatibility for Path.from_uri which is only
|
|
13
|
+
available in Python 3.13+.
|
|
14
|
+
|
|
15
|
+
Args:
|
|
16
|
+
uri: File URI string (e.g., "file:///path/to/file")
|
|
17
|
+
|
|
18
|
+
Returns:
|
|
19
|
+
Path object representing the file path
|
|
20
|
+
|
|
21
|
+
Raises:
|
|
22
|
+
ValueError: If the URI is not a valid file URI
|
|
23
|
+
|
|
24
|
+
"""
|
|
25
|
+
if sys.version_info >= (3, 13):
|
|
26
|
+
# For Python 3.13+, delegate to the standard library but catch its ValueError
|
|
27
|
+
# and re-raise with our format for consistency
|
|
28
|
+
try:
|
|
29
|
+
return Path.from_uri(uri)
|
|
30
|
+
except ValueError as e:
|
|
31
|
+
# Re-parse to get our own error format
|
|
32
|
+
parsed = urlparse(uri)
|
|
33
|
+
if not parsed.scheme:
|
|
34
|
+
raise ValueError("Expected file URI, got scheme: ") from e
|
|
35
|
+
if parsed.scheme != "file":
|
|
36
|
+
raise ValueError(
|
|
37
|
+
f"Expected file URI, got scheme: {parsed.scheme}"
|
|
38
|
+
) from e
|
|
39
|
+
# Re-raise original error if it's something else
|
|
40
|
+
raise
|
|
41
|
+
|
|
42
|
+
# Manual implementation for Python 3.12 and earlier
|
|
43
|
+
parsed = urlparse(uri)
|
|
44
|
+
|
|
45
|
+
if not parsed.scheme:
|
|
46
|
+
raise ValueError("Expected file URI, got scheme: ")
|
|
47
|
+
|
|
48
|
+
if parsed.scheme != "file":
|
|
49
|
+
raise ValueError(f"Expected file URI, got scheme: {parsed.scheme}")
|
|
50
|
+
|
|
51
|
+
# Convert URL path to local path
|
|
52
|
+
path_str = url2pathname(parsed.path)
|
|
53
|
+
|
|
54
|
+
return Path(path_str)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: kodit
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.4
|
|
4
4
|
Summary: Code indexing for better AI code generation
|
|
5
5
|
Project-URL: Homepage, https://docs.helixml.tech/kodit/
|
|
6
6
|
Project-URL: Documentation, https://docs.helixml.tech/kodit/
|
|
@@ -92,13 +92,16 @@ code. This index is used to build a snippet library, ready for ingestion into an
|
|
|
92
92
|
|
|
93
93
|
- Index local directories and public Git repositories
|
|
94
94
|
- Build comprehensive snippet libraries for LLM ingestion
|
|
95
|
-
- Support for
|
|
96
|
-
-
|
|
95
|
+
- Support for 20+ programming languages including Python, JavaScript/TypeScript, Java, Go, Rust, C/C++, C#, HTML/CSS, and more
|
|
96
|
+
- Advanced code analysis with dependency tracking and call graph generation
|
|
97
|
+
- Intelligent snippet extraction with context-aware dependencies
|
|
98
|
+
- Efficient indexing with selective reindexing (only processes modified files)
|
|
97
99
|
- Privacy first: respects .gitignore and .noindex files
|
|
98
100
|
- **NEW in 0.3**: Auto-indexing configuration for shared server deployments
|
|
99
101
|
- **NEW in 0.3**: Enhanced Git provider support including Azure DevOps
|
|
100
102
|
- **NEW in 0.3**: Index private repositories via a PAT
|
|
101
103
|
- **NEW in 0.3**: Improved progress monitoring and reporting during indexing
|
|
104
|
+
- **NEW in 0.3**: Advanced code slicing infrastructure with Tree-sitter parsing
|
|
102
105
|
|
|
103
106
|
### MCP Server
|
|
104
107
|
|
|
@@ -111,7 +114,9 @@ intent. Kodit has been tested to work well with:
|
|
|
111
114
|
- [Cursor](https://docs.helix.ml/kodit/getting-started/integration/#integration-with-cursor)
|
|
112
115
|
- [Cline](https://docs.helix.ml/kodit/getting-started/integration/#integration-with-cline)
|
|
113
116
|
- Please contribute more instructions! ... any other assistant is likely to work ...
|
|
114
|
-
- **New in 0.3**:
|
|
117
|
+
- **New in 0.3**: Advanced search filters by source, language, author, date range, and file path
|
|
118
|
+
- **New in 0.3**: Hybrid search combining BM25 keyword search with semantic search
|
|
119
|
+
- **New in 0.4**: Enhanced MCP tools with rich context parameters and metadata
|
|
115
120
|
|
|
116
121
|
### Enterprise Ready
|
|
117
122
|
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
kodit/.gitignore,sha256=ztkjgRwL9Uud1OEi36hGQeDGk3OLK1NfDEO8YqGYy8o,11
|
|
2
|
+
kodit/__init__.py,sha256=aEKHYninUq1yh6jaNfvJBYg-6fenpN132nJt1UU6Jxs,59
|
|
3
|
+
kodit/_version.py,sha256=Mxups7YfGBY2vvCok_hLJKCtU6O1WHQJfsMY-bAJ0Yg,511
|
|
4
|
+
kodit/app.py,sha256=uv67TE83fZE7wrA7cz-sKosFrAXlKRr1B7fT-X_gMZQ,2103
|
|
5
|
+
kodit/cli.py,sha256=xh2MNA4sUTA3_yVbHGz-CRpbS0TTzKwf33XbScA74Gw,16626
|
|
6
|
+
kodit/config.py,sha256=VUoUi2t2yGhqOtm5MSZuaasNSklH50hfWn6GOrz3jnU,7518
|
|
7
|
+
kodit/database.py,sha256=kI9yBm4uunsgV4-QeVoCBL0wLzU4kYmYv5qZilGnbPE,1740
|
|
8
|
+
kodit/log.py,sha256=WOsLRitpCBtJa5IcsyZpKr146kXXHK2nU5VA90gcJdQ,8736
|
|
9
|
+
kodit/mcp.py,sha256=OPscMbGQ05nFHJ_UkntobocZ6Y9wO2ZyRx1tVj7XSsY,6016
|
|
10
|
+
kodit/middleware.py,sha256=I6FOkqG9-8RH5kR1-0ZoQWfE4qLCB8lZYv8H_OCH29o,2714
|
|
11
|
+
kodit/reporting.py,sha256=icce1ZyiADsA_Qz-mSjgn2H4SSqKuGfLKnw-yrl9nsg,2722
|
|
12
|
+
kodit/application/__init__.py,sha256=mH50wTpgP9dhbKztFsL8Dda9Hi18TSnMVxXtpp4aGOA,35
|
|
13
|
+
kodit/application/factories/__init__.py,sha256=bU5CvEnaBePZ7JbkCOp1MGTNP752bnU2uEqmfy5FdRk,37
|
|
14
|
+
kodit/application/factories/code_indexing_factory.py,sha256=R9f0wsj4-3NJFS5SEt_-OIGR_s_01gJXaL3PkZd8MlU,5911
|
|
15
|
+
kodit/application/services/__init__.py,sha256=p5UQNw-H5sxQvs5Etfte93B3cJ1kKW6DNxK34uFvU1E,38
|
|
16
|
+
kodit/application/services/code_indexing_application_service.py,sha256=SuIuyBoSPOSjj5VaXIbxcYqaTEeMuUCu7w1tO8orrOY,14656
|
|
17
|
+
kodit/domain/__init__.py,sha256=TCpg4Xx-oF4mKV91lo4iXqMEfBT1OoRSYnbG-zVWolA,66
|
|
18
|
+
kodit/domain/entities.py,sha256=Mcku1Wmk3Xl3YJhY65_RoiLeffOLKOHI0uCAXWJrmvQ,8698
|
|
19
|
+
kodit/domain/errors.py,sha256=yIsgCjM_yOFIg8l7l-t7jM8pgeAX4cfPq0owf7iz3DA,106
|
|
20
|
+
kodit/domain/interfaces.py,sha256=Jkd0Ob4qSvhZHI9jRPFQ1n5Cv0SvU-y3Z-HCw2ikc4I,742
|
|
21
|
+
kodit/domain/protocols.py,sha256=L94FwChhCoj39xicaVrK2UFhFbPzi5JEXW_KmgODsLA,1859
|
|
22
|
+
kodit/domain/value_objects.py,sha256=MBZ0WdqQghDmL0Coz_QjPMoVMCiL8pjtpJ5FgaIynoc,17342
|
|
23
|
+
kodit/domain/services/__init__.py,sha256=Q1GhCK_PqKHYwYE4tkwDz5BIyXkJngLBBOHhzvX8nzo,42
|
|
24
|
+
kodit/domain/services/bm25_service.py,sha256=nsfTan3XtDwXuuAu1LUv-6Jukm6qFKVqqCVymjyepZQ,3625
|
|
25
|
+
kodit/domain/services/embedding_service.py,sha256=7drYRC2kjg0WJmo06a2E9N0vDnwInUlBB96twjz2BT8,4526
|
|
26
|
+
kodit/domain/services/enrichment_service.py,sha256=XsXg3nV-KN4rqtC7Zro_ZiZ6RSq-1eA1MG6IDzFGyBA,1316
|
|
27
|
+
kodit/domain/services/index_query_service.py,sha256=02UWfyB_HoHUskunGuHeq5XwQLSWxGSK4OhvxcqIfY0,2022
|
|
28
|
+
kodit/domain/services/index_service.py,sha256=ezVGbWdII25adri4_yyvsAF2eJOt4xmoHRDuS_-c6Ro,10810
|
|
29
|
+
kodit/infrastructure/__init__.py,sha256=HzEYIjoXnkz_i_MHO2e0sIVYweUcRnl2RpyBiTbMObU,28
|
|
30
|
+
kodit/infrastructure/bm25/__init__.py,sha256=DmGbrEO34FOJy4e685BbyxLA7gPW1eqs2gAxsp6JOuM,34
|
|
31
|
+
kodit/infrastructure/bm25/bm25_factory.py,sha256=I4eo7qRslnyXIRkBf-StZ5ga2Evrr5J5YFocTChFD3g,884
|
|
32
|
+
kodit/infrastructure/bm25/local_bm25_repository.py,sha256=B1ggfHdjC9sFIh62MmSul2tsutWsWFQx5S1Xn07X_I8,4531
|
|
33
|
+
kodit/infrastructure/bm25/vectorchord_bm25_repository.py,sha256=Jyic55V-38XeTad462Ge751iKyc0X8RNVBM9pr_DVJk,7439
|
|
34
|
+
kodit/infrastructure/cloning/__init__.py,sha256=IzIvX-yeRRFZ-lfvPVSEe_qXszO6DGQdjKwwDigexyQ,30
|
|
35
|
+
kodit/infrastructure/cloning/metadata.py,sha256=GD2UnCC1oR82RD0SVUqk9CJOqzXPxhOAHVOp7jqN6Qc,3571
|
|
36
|
+
kodit/infrastructure/cloning/git/__init__.py,sha256=20ePcp0qE6BuLsjsv4KYB1DzKhMIMsPXwEqIEZtjTJs,34
|
|
37
|
+
kodit/infrastructure/cloning/git/working_copy.py,sha256=SvaLAJa7FRsLuWjJz-xUeTJ-EkpPi_rIOP-gyuHLIdM,1835
|
|
38
|
+
kodit/infrastructure/embedding/__init__.py,sha256=F-8nLlWAerYJ0MOIA4tbXHLan8bW5rRR84vzxx6tRKI,39
|
|
39
|
+
kodit/infrastructure/embedding/embedding_factory.py,sha256=A6if4XW7Kp-23qrWlLLNyhijwxZLxmhcyCX-ayvQKY4,3451
|
|
40
|
+
kodit/infrastructure/embedding/local_vector_search_repository.py,sha256=ExweyNEL5cP-g3eDhGqZSih7zhdOrop2WdFPPJL-tB4,3505
|
|
41
|
+
kodit/infrastructure/embedding/vectorchord_vector_search_repository.py,sha256=PIoU0HsDlaoXDXnGjOR0LAkAcW4JiE3ymJy_SBhEopc,8030
|
|
42
|
+
kodit/infrastructure/embedding/embedding_providers/__init__.py,sha256=qeZ-oAIAxMl5QqebGtO1lq-tHjl_ucAwOXePklcwwGk,34
|
|
43
|
+
kodit/infrastructure/embedding/embedding_providers/batching.py,sha256=a8CL9PX2VLmbeg616fc_lQzfC4BWTVn32m4SEhXpHxc,3279
|
|
44
|
+
kodit/infrastructure/embedding/embedding_providers/hash_embedding_provider.py,sha256=V6OdCuWyQQOvo3OJGRi-gBKDApIcrELydFg7T696P5s,2257
|
|
45
|
+
kodit/infrastructure/embedding/embedding_providers/local_embedding_provider.py,sha256=U5fc8jUP8wF-nq1zo-CfSbJbLQyE-3muKmRCaYGtytk,4387
|
|
46
|
+
kodit/infrastructure/embedding/embedding_providers/openai_embedding_provider.py,sha256=LIK9Iir7geraZoqiaNbeHv3hXrghZRDpYGJDEjZaqzQ,4086
|
|
47
|
+
kodit/infrastructure/enrichment/__init__.py,sha256=8acZKNzql8Fs0lceFu9U3KoUrOptRBtVIxr_Iw6lz3Y,40
|
|
48
|
+
kodit/infrastructure/enrichment/enrichment_factory.py,sha256=Pz0Rb1I68udL_zXY3KvJ3LR3aK_9mdF1nMRGQUu4lM0,1828
|
|
49
|
+
kodit/infrastructure/enrichment/local_enrichment_provider.py,sha256=8CATNtgMHgBRt24GrYEwaZKrroNCxMJS-39xQJoG3N0,3818
|
|
50
|
+
kodit/infrastructure/enrichment/null_enrichment_provider.py,sha256=DhZkJBnkvXg_XSAs-oKiFnKqYFPnmTl3ikdxrqeEfbc,713
|
|
51
|
+
kodit/infrastructure/enrichment/openai_enrichment_provider.py,sha256=fenq4HiJ2UkrzsE2D0A0qpmro38z9mKaIzKKU5v7hnY,3189
|
|
52
|
+
kodit/infrastructure/git/__init__.py,sha256=0iMosFzudj4_xNIMe2SRbV6l5bWqkjnUsZoFsoZFuM8,33
|
|
53
|
+
kodit/infrastructure/git/git_utils.py,sha256=KERwmhWDR4ooMQKS-nSPxjvdCzoWF9NS6nhdeXyzdtY,571
|
|
54
|
+
kodit/infrastructure/ignore/__init__.py,sha256=VzFv8XOzHmsu0MEGnWVSF6KsgqLBmvHlRqAkT1Xb1MY,36
|
|
55
|
+
kodit/infrastructure/ignore/ignore_pattern_provider.py,sha256=zdxun3GodLfXxyssBK8QDUK58xb4fBJ0SKcHUyn3pzM,2131
|
|
56
|
+
kodit/infrastructure/indexing/__init__.py,sha256=7UPRa2jwCAsa0Orsp6PqXSF8iIXJVzXHMFmrKkI9yH8,38
|
|
57
|
+
kodit/infrastructure/indexing/auto_indexing_service.py,sha256=PgAyrmR8jNkAOlGnhQjFkqoE22oh-IwYTCg_v4o45Fo,2764
|
|
58
|
+
kodit/infrastructure/indexing/fusion_service.py,sha256=2B0guBsuKz19uWcs18sIJpUJPzXoRvULgl7UNWQGysA,1809
|
|
59
|
+
kodit/infrastructure/indexing/indexing_factory.py,sha256=LPjPCps_wJ9M_fZGRP02bfc2pvYc50ZSTYI99XwRRPg,918
|
|
60
|
+
kodit/infrastructure/mappers/__init__.py,sha256=QPHOjNreXmBPPovZ6elnYFS0vD-IsmrGl4TT01FCKro,77
|
|
61
|
+
kodit/infrastructure/mappers/index_mapper.py,sha256=ZSfu8kjTaa8_UY0nTqr4b02NS3VrjqZYkduCN71AL2g,12743
|
|
62
|
+
kodit/infrastructure/slicing/__init__.py,sha256=x7cjvHA9Ay2weUYE_dpdAaPaStp20M-4U2b5MLgT5KM,37
|
|
63
|
+
kodit/infrastructure/slicing/language_detection_service.py,sha256=JGJXrq9bLyfnisWJXeP7y1jbZMmKAISdPBlRBCosUcE,684
|
|
64
|
+
kodit/infrastructure/slicing/slicer.py,sha256=Q5Syhe2KmYoCPvgP03XA6X0LVzrFgVyttRLEDHNrUSU,34305
|
|
65
|
+
kodit/infrastructure/sqlalchemy/__init__.py,sha256=UXPMSF_hgWaqr86cawRVqM8XdVNumQyyK5B8B97GnlA,33
|
|
66
|
+
kodit/infrastructure/sqlalchemy/embedding_repository.py,sha256=dC2Wzj_zQiWExwfScE1LAGiiyxPyg0YepwyLOgDwcs4,7905
|
|
67
|
+
kodit/infrastructure/sqlalchemy/entities.py,sha256=Dmh0z-dMI0wfMAPpf62kxU4md6NUH9P5Nx1QSTITOfg,5961
|
|
68
|
+
kodit/infrastructure/sqlalchemy/index_repository.py,sha256=fMnR3OxZN37dtp1M2Menf0xy31GjK1iv_0zn7EvRKYs,22575
|
|
69
|
+
kodit/infrastructure/ui/__init__.py,sha256=CzbLOBwIZ6B6iAHEd1L8cIBydCj-n_kobxJAhz2I9_Y,32
|
|
70
|
+
kodit/infrastructure/ui/progress.py,sha256=BaAeMEgXlSSb0c_t_NPxnThIktkzzCS9kegb5ExULJs,4791
|
|
71
|
+
kodit/infrastructure/ui/spinner.py,sha256=GcP115qtR0VEnGfMEtsGoAUpRzVGUSfiUXfoJJERngA,2357
|
|
72
|
+
kodit/migrations/README,sha256=ISVtAOvqvKk_5ThM5ioJE-lMkvf9IbknFUFVU_vPma4,58
|
|
73
|
+
kodit/migrations/__init__.py,sha256=lP5MuwlyWRMO6UcDWnQcQ3G-GYHcFb6rl9gYPHJ1sjo,40
|
|
74
|
+
kodit/migrations/env.py,sha256=m57TkFLYjQ4w2aw1YICXkeek27M6qjwRDMHvThWqIL0,2383
|
|
75
|
+
kodit/migrations/script.py.mako,sha256=zWziKtiwYKEWuwPV_HBNHwa9LCT45_bi01-uSNFaOOE,703
|
|
76
|
+
kodit/migrations/versions/4073b33f9436_add_file_processing_flag.py,sha256=c8dMcKQ-BBBr_2-92eJZFS3Fwe3__B2eNqvQeMZHs0w,917
|
|
77
|
+
kodit/migrations/versions/4552eb3f23ce_add_summary.py,sha256=WjyBQzFK8IXuvta15YBE23yaTMM1rZCXvPxW98MStng,870
|
|
78
|
+
kodit/migrations/versions/7c3bbc2ab32b_add_embeddings_table.py,sha256=JL6lxaYtGbXolrkNEujg5SWj3_aQBWReYP3I4vcibdo,1755
|
|
79
|
+
kodit/migrations/versions/85155663351e_initial.py,sha256=h8DWmSxVwTtWlmWNH8-S4AxfEIbCm_iWtR6Kg5psPnk,3605
|
|
80
|
+
kodit/migrations/versions/9e53ea8bb3b0_add_authors.py,sha256=a32Zm8KUQyiiLkjKNPYdaJDgjW6VsV-GhaLnPnK_fpI,3884
|
|
81
|
+
kodit/migrations/versions/__init__.py,sha256=9-lHzptItTzq_fomdIRBegQNm4Znx6pVjwD4MiqRIdo,36
|
|
82
|
+
kodit/migrations/versions/c3f5137d30f5_index_all_the_things.py,sha256=r7ukmJ_axXLAWewYx-F1fEmZ4JbtFd37i7cSb0tq3y0,1722
|
|
83
|
+
kodit/utils/__init__.py,sha256=DPEB1i8evnLF4Ns3huuAYg-0pKBFKUFuiDzOKG9r-sw,33
|
|
84
|
+
kodit/utils/path_utils.py,sha256=thK6YGGNvQThdBaCYCCeCvS1L8x-lwl3AoGht2jnjGw,1645
|
|
85
|
+
kodit-0.3.4.dist-info/METADATA,sha256=rZKGzihHJy8kShI8lybNHWbhB7z4knuoLGLZ3ba987w,6871
|
|
86
|
+
kodit-0.3.4.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
87
|
+
kodit-0.3.4.dist-info/entry_points.txt,sha256=hoTn-1aKyTItjnY91fnO-rV5uaWQLQ-Vi7V5et2IbHY,40
|
|
88
|
+
kodit-0.3.4.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
89
|
+
kodit-0.3.4.dist-info/RECORD,,
|
kodit/domain/enums.py
DELETED
kodit/domain/repositories.py
DELETED
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
"""Domain repositories with generic patterns."""
|
|
2
|
-
|
|
3
|
-
from collections.abc import Sequence
|
|
4
|
-
from typing import Protocol, TypeVar
|
|
5
|
-
|
|
6
|
-
from kodit.domain.entities import (
|
|
7
|
-
Author,
|
|
8
|
-
AuthorFileMapping,
|
|
9
|
-
File,
|
|
10
|
-
Snippet,
|
|
11
|
-
Source,
|
|
12
|
-
SourceType,
|
|
13
|
-
)
|
|
14
|
-
from kodit.domain.value_objects import (
|
|
15
|
-
MultiSearchRequest,
|
|
16
|
-
SnippetWithContext,
|
|
17
|
-
)
|
|
18
|
-
|
|
19
|
-
T = TypeVar("T")
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
class GenericRepository(Protocol[T]):
|
|
23
|
-
"""Generic repository interface."""
|
|
24
|
-
|
|
25
|
-
async def get(self, id: int) -> T | None: # noqa: A002
|
|
26
|
-
"""Get entity by ID."""
|
|
27
|
-
...
|
|
28
|
-
|
|
29
|
-
async def save(self, entity: T) -> T:
|
|
30
|
-
"""Save entity."""
|
|
31
|
-
...
|
|
32
|
-
|
|
33
|
-
async def delete(self, id: int) -> None: # noqa: A002
|
|
34
|
-
"""Delete entity by ID."""
|
|
35
|
-
...
|
|
36
|
-
|
|
37
|
-
async def list(self) -> Sequence[T]:
|
|
38
|
-
"""List all entities."""
|
|
39
|
-
...
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
class SourceRepository(GenericRepository[Source]):
|
|
43
|
-
"""Source repository with specific methods."""
|
|
44
|
-
|
|
45
|
-
async def get_by_uri(self, uri: str) -> Source | None:
|
|
46
|
-
"""Get a source by URI."""
|
|
47
|
-
raise NotImplementedError
|
|
48
|
-
|
|
49
|
-
async def list_by_type(
|
|
50
|
-
self, source_type: SourceType | None = None
|
|
51
|
-
) -> Sequence[Source]:
|
|
52
|
-
"""List sources by type."""
|
|
53
|
-
raise NotImplementedError
|
|
54
|
-
|
|
55
|
-
async def create_file(self, file: File) -> File:
|
|
56
|
-
"""Create a new file record."""
|
|
57
|
-
raise NotImplementedError
|
|
58
|
-
|
|
59
|
-
async def upsert_author(self, author: Author) -> Author:
|
|
60
|
-
"""Create a new author or return existing one if email already exists."""
|
|
61
|
-
raise NotImplementedError
|
|
62
|
-
|
|
63
|
-
async def upsert_author_file_mapping(
|
|
64
|
-
self, mapping: "AuthorFileMapping"
|
|
65
|
-
) -> "AuthorFileMapping":
|
|
66
|
-
"""Create a new author file mapping or return existing one if already exists."""
|
|
67
|
-
raise NotImplementedError
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
class AuthorRepository(GenericRepository[Author]):
|
|
71
|
-
"""Author repository with specific methods."""
|
|
72
|
-
|
|
73
|
-
async def get_by_name(self, name: str) -> Author | None:
|
|
74
|
-
"""Get an author by name."""
|
|
75
|
-
raise NotImplementedError
|
|
76
|
-
|
|
77
|
-
async def get_by_email(self, email: str) -> Author | None:
|
|
78
|
-
"""Get an author by email."""
|
|
79
|
-
raise NotImplementedError
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
class SnippetRepository(GenericRepository[Snippet]):
|
|
83
|
-
"""Snippet repository with specific methods."""
|
|
84
|
-
|
|
85
|
-
async def get_by_index(self, index_id: int) -> Sequence[Snippet]:
|
|
86
|
-
"""Get all snippets for an index."""
|
|
87
|
-
raise NotImplementedError
|
|
88
|
-
|
|
89
|
-
async def delete_by_index(self, index_id: int) -> None:
|
|
90
|
-
"""Delete all snippets for an index."""
|
|
91
|
-
raise NotImplementedError
|
|
92
|
-
|
|
93
|
-
async def list_snippets(
|
|
94
|
-
self, file_path: str | None = None, source_uri: str | None = None
|
|
95
|
-
) -> Sequence[SnippetWithContext]:
|
|
96
|
-
"""List snippets with optional filtering by file path and source URI.
|
|
97
|
-
|
|
98
|
-
Args:
|
|
99
|
-
file_path: Optional file or directory path to filter by. Can be relative
|
|
100
|
-
(uri) or absolute (cloned_path).
|
|
101
|
-
source_uri: Optional source URI to filter by. If None, returns snippets from
|
|
102
|
-
all sources.
|
|
103
|
-
|
|
104
|
-
Returns:
|
|
105
|
-
A sequence of SnippetWithContext instances matching the criteria
|
|
106
|
-
|
|
107
|
-
"""
|
|
108
|
-
raise NotImplementedError
|
|
109
|
-
|
|
110
|
-
async def search(self, request: MultiSearchRequest) -> Sequence[SnippetWithContext]:
|
|
111
|
-
"""Search snippets with filters.
|
|
112
|
-
|
|
113
|
-
Args:
|
|
114
|
-
request: The search request containing queries and optional filters.
|
|
115
|
-
|
|
116
|
-
Returns:
|
|
117
|
-
A sequence of SnippetWithContext instances matching the search criteria.
|
|
118
|
-
|
|
119
|
-
"""
|
|
120
|
-
raise NotImplementedError
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
class FileRepository(GenericRepository[File]):
|
|
124
|
-
"""File repository with specific methods."""
|
|
125
|
-
|
|
126
|
-
async def get_files_for_index(self, index_id: int) -> Sequence[File]:
|
|
127
|
-
"""Get all files for an index."""
|
|
128
|
-
raise NotImplementedError
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
"""Domain service for ignore patterns."""
|
|
2
|
-
|
|
3
|
-
from abc import ABC, abstractmethod
|
|
4
|
-
from pathlib import Path
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
class IgnorePatternProvider(ABC):
|
|
8
|
-
"""Abstract interface for ignore pattern providers."""
|
|
9
|
-
|
|
10
|
-
@abstractmethod
|
|
11
|
-
def should_ignore(self, path: Path) -> bool:
|
|
12
|
-
"""Check if a path should be ignored.
|
|
13
|
-
|
|
14
|
-
Args:
|
|
15
|
-
path: The path to check.
|
|
16
|
-
|
|
17
|
-
Returns:
|
|
18
|
-
True if the path should be ignored, False otherwise.
|
|
19
|
-
|
|
20
|
-
"""
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
class IgnoreService:
|
|
24
|
-
"""Domain service for managing ignore patterns."""
|
|
25
|
-
|
|
26
|
-
def __init__(self, ignore_pattern_provider: IgnorePatternProvider) -> None:
|
|
27
|
-
"""Initialize the ignore service.
|
|
28
|
-
|
|
29
|
-
Args:
|
|
30
|
-
ignore_pattern_provider: The ignore pattern provider to use.
|
|
31
|
-
|
|
32
|
-
"""
|
|
33
|
-
self.ignore_pattern_provider = ignore_pattern_provider
|
|
34
|
-
|
|
35
|
-
def should_ignore(self, path: Path) -> bool:
|
|
36
|
-
"""Check if a path should be ignored.
|
|
37
|
-
|
|
38
|
-
Args:
|
|
39
|
-
path: The path to check.
|
|
40
|
-
|
|
41
|
-
Returns:
|
|
42
|
-
True if the path should be ignored, False otherwise.
|
|
43
|
-
|
|
44
|
-
"""
|
|
45
|
-
return self.ignore_pattern_provider.should_ignore(path)
|