Αναζήτηση κώδικα με το γράφημα κώδικα
Αυτός ο οδηγός δείχνει πώς να φέρετε ένα αποθετήριο στο γράφημα κώδικα και μετά να το χρησιμοποιήσετε για να απαντήσετε στην ερώτηση που πραγματικά έχετε πριν από μια αναδιάρθρωση: από τι εξαρτάται αυτό;
Το γράφημα κώδικα είναι μια βάση δεδομένων συμβόλων και ακμών που χτίζεται αναλύοντας τα καταχωρισμένα checkout σας με το tree-sitter. Τα εργαλεία του απευθύνονται σε πράκτορες — τα προσεγγίζετε ζητώντας από έναν πράκτορα.
Πριν ξεκινήσετε
Ενότητα με τίτλο «Πριν ξεκινήσετε»Το γράφημα ευρετηριάζει Dart, JavaScript, TypeScript, TSX, PHP, Python, Rust, Zig, C, C++, Go, Java, Ruby, C#, Swift, Kotlin, R, Assembly, MATLAB και Ada. Αρχεία σε οποιαδήποτε άλλη γλώσσα δεν αναλύονται, οπότε δεν εμφανίζονται στα search_code, code_symbol, code_callers, code_callees ή code_impact.
Δύο ακόμη πράγματα καθορίζουν τι ευρετηριάζεται:
- Σε ένα git work tree, η απαρίθμηση βασίζεται στο
git ls-files --cached --others --exclude-standard, οπότε τηρείται κάθε.gitignore, ένθετο αρχείο ignore,.git/info/excludeκαι το καθολικό αρχείο εξαιρέσεων. Αυτό κρατά ταnode_modulesκαι την έξοδο build έξω από το γράφημα. - Τα παραγόμενα Dart απορρίπτονται ανεξαρτήτως. Τα παραγόμενα αρχεία συνήθως καταχωρίζονται στο git, οπότε το git από μόνο του δεν θα τα απέκλειε και αλλάζουν σε κάθε εκτέλεση codegen.
Ευρετηριάστε ένα αποθετήριο
Ενότητα με τίτλο «Ευρετηριάστε ένα αποθετήριο»Η καταχώριση ενός checkout πυροδοτεί το RepoAdded, το οποίο ξεκινά αυτόματα το pipeline index_code για αυτό. Δείτε Προσθήκη αποθετηρίων σε χώρο εργασίας.
Για να κάνετε εκ νέου ευρετηρίαση με το χέρι:
- Ανοίξτε Ρυθμίσεις → Χώρος εργασίας → Αποθετήρια.
- Κάντε κλικ στο κουμπί Ευρετηρίαση κώδικα στη γραμμή του αποθετηρίου.
- Όσο εκτελείται, το κουμπί δείχνει τα αρχεία που ολοκληρώθηκαν προς το σύνολο, με χειριστήριο ακύρωσης. Όταν τελειώσει, καταλήγει σε ένα σημάδι ελέγχου με τον αριθμό των συμβόλων.
Το γράφημα είναι κατατμημένο ανά χώρο εργασίας, αποθετήριο και checkout: το συνδεδεμένο checkout είναι ένα τμήμα, και κάθε worktree χώρου παίρνει το δικό του (με κλειδί το αναγνωριστικό του απομονωμένου αποθετηρίου του).
Αξίζει να γνωρίζετε δύο περιορισμούς, γιατί εξηγούν μια αναμονή που μοιάζει με κόλλημα:
- Ο παρατηρητής αρχείων επιτρέπει μόνο μία εκτέλεση ευρετηρίασης τη φορά στον κεντρικό υπολογιστή — ένα δεύτερο checkout περιμένει. Το pipeline
index_codeέχει ξεχωριστό όριο μίας εκτέλεσης ανά χώρο εργασίας, οπότε δύο αποθετήρια στον ίδιο χώρο εργασίας μπαίνουν σε ουρά· διαφορετικοί χώροι εργασίας μπορούν να ευρετηριάζουν παράλληλα. Ο ίδιος ο ευρετηριαστής σειριοποιεί δύο εκτελέσεις του ίδιου checkout, ώστε μια εκκίνηση pipeline και μια σάρωση του παρατηρητή να μην μπορούν να το αναλύσουν δύο φορές. - Τα worktree που ανήκουν σε ανενεργούς χώρους (κανένα μήνυμα την τελευταία εβδομάδα) ούτε παρατηρούνται ούτε ευρετηριάζονται. Τα συνδεδεμένα checkout παραμένουν υπό παρατήρηση. Μια απόφαση παράλειψης επανελέγχεται μετά από πέντε λεπτά, οπότε ένας χώρος που γίνεται ξανά ενεργός εντοπίζεται.
Βρείτε ένα σύμβολο
Ενότητα με τίτλο «Βρείτε ένα σύμβολο»Ζητήστε από έναν πράκτορα να κάνει αναζήτηση. Το εργαλείο είναι το search_code και χρειάζεται και χώρο εργασίας και αποθετήριο:
search_code(workspace_id: "...", repo_id: "...", query: "authentication middleware")Τα αναγνωριστικά αποθετηρίων προέρχονται από το list_repos. Το προαιρετικό όρισμα mode είναι keyword, semantic ή hybrid και έχει προεπιλογή το hybrid — BM25 πάνω σε ονόματα, υπογραφές και σχόλια τεκμηρίωσης, συνδυασμένο με ομοιότητα διανυσμάτων.
Κάθε αποτέλεσμα φέρει το αναγνωριστικό, το όνομα, το πλήρες όνομα, το είδος, τη διαδρομή αρχείου, τη γραμμή αρχής και τέλους του συμβόλου και την υπογραφή του όταν έχει. Το id είναι η λαβή που δίνετε σε κάθε άλλο εργαλείο αυτής της σελίδας.
Όταν γνωρίζετε το ακριβές όνομα, αναζητήστε το απευθείας αντ’ αυτού:
code_symbol(workspace_id: "...", repo_id: "...", name: "MyClass")Ιχνηλάτηση κλήσεων
Ενότητα με τίτλο «Ιχνηλάτηση κλήσεων»Και τα δύο παίρνουν ένα symbol_id από ένα αποτέλεσμα αναζήτησης, συν ένα προαιρετικό limit (προεπιλογή 50):
code_callers(workspace_id: "...", symbol_id: "...")code_callees(workspace_id: "...", symbol_id: "...")Το code_callers επιστρέφει τα σύμβολα που έχουν εισερχόμενη ακμή προς αυτό· το code_callees επιστρέφει εκείνα από τα οποία εξαρτάται.
Ελέγξτε τι θα έσπαγε μια αλλαγή
Ενότητα με τίτλο «Ελέγξτε τι θα έσπαγε μια αλλαγή»Αυτό είναι το εργαλείο για χάρη του οποίου υπάρχει όλη η σελίδα:
code_impact(workspace_id: "...", symbol_id: "...", depth: 3)Υπολογίζει την ακτίνα αντίστροφης εξάρτησης: ό,τι εξαρτάται άμεσα ή μεταβατικά από το σύμβολο κατά μήκος ακμών calls, extends και implements (τα imports, τα mixes-in και οι γενικές αναφορές αποθηκεύονται στο γράφημα αλλά δεν διατρέχονται εδώ). Το depth είναι ο μέγιστος αριθμός αλμάτων, μεταξύ 1 και 6, με προεπιλογή το 2.
Το αποτέλεσμα έχει τρία πεδία:
root— το σύμβολο για το οποίο ρωτήσατεimpacted— το σύνολο που είναι προσπελάσιμο, μαζί με τη ρίζα σε βάθος 0, καθένα με τοdepthτου από τη ρίζαedgeCount— πόσες ακμές διέσχισε η διάσχιση, ως αριθμός και όχι οι ίδιες οι ακμές
Εκτελέστε το πριν μετονομάσετε ή αλλάξετε μια υπογραφή και δώστε στον πράκτορα τη λίστα των επηρεαζόμενων ως πεδίο ευθύνης του.
Τα αποτελέσματα ελέγχονται ως προς το αντίγραφο εργασίας του ίδιου του καλούντος
Ενότητα με τίτλο «Τα αποτελέσματα ελέγχονται ως προς το αντίγραφο εργασίας του ίδιου του καλούντος»Για έναν καλούντα πράκτορα, το αναγνωριστικό χώρου εισάγεται αυτόματα και τα αποτελέσματα επαληθεύονται ως προς το αντίγραφο εργασίας αυτού του χώρου. Ένα σύμβολο του οποίου το αρχείο δεν υπάρχει πλέον στο δέντρο του καλούντος παραλείπεται, και η απάντηση φέρει έναν αριθμό staleOmitted καθώς και μια σημείωση ότι το ευρετήριο είναι ξεπερασμένο για αυτά τα σύμβολα.
Γι’ αυτό εσείς και ένας πράκτορας μπορείτε να πάρετε διαφορετικές απαντήσεις στο ίδιο ερώτημα και γι’ αυτό ένας πράκτορας σε έναν χώρο μπορεί να πάρει διαφορετική απάντηση από έναν πράκτορα σε άλλον. Κάθε συνομιλία σε έναν χώρο μοιράζεται αυτό το ένα worktree. Η επαλήθευση αποτυγχάνει ανοιχτά: προτιμάται μια ξεπερασμένη απάντηση από μια κενή.
Ζητήστε από έναν πράκτορα να εκτελέσει το code_impact (ή το review_studio.blastRadius) όταν θέλετε την ακτίνα επιρροής μιας αλλαγής. Δείτε Υπολογισμός ελέγχου.
Η σημασιολογική αναζήτηση χρειάζεται το μοντέλο ενσωματώσεων
Ενότητα με τίτλο «Η σημασιολογική αναζήτηση χρειάζεται το μοντέλο ενσωματώσεων»Τα σύμβολα και τα γεγονότα ενσωματώνονται τη στιγμή της εγγραφής και μόνο όταν είναι εγκατεστημένο το μοντέλο ενσωματώσεων στη συσκευή. Μέχρι τότε, το mode: "semantic" και το σημασιολογικό μισό της υβριδικής λειτουργίας δεν έχουν τίποτα να αντιστοιχίσουν και η αναζήτηση είναι ουσιαστικά μόνο με λέξεις-κλειδιά.
Εγκαταστήστε το μοντέλο στις Ρυθμίσεις → Διακομιστής → Διαγνωστικά και απόρρητο → Σημασιολογική αναζήτηση πριν κάνετε ευρετηρίαση. Τα σύμβολα αποκτούν ένα διάνυσμα όταν εισάγεται το αρχείο τους.
Σημειώστε επίσης ότι κάθε επαναχτίσιμο του εκτελέσιμου του διακομιστή επανατοποθετεί τα dylib των γραμματικών και αλλάζει τους χρόνους τροποποίησής τους, κάτι που ακυρώνει κάθε σημείο ελέγχου του ευρετηρίου και αναγκάζει μια πλήρη νέα σάρωση κάθε checkout στην επόμενη εκτέλεση. Κάνει εκ νέου κατακερματισμό, αλλά δεν εξάγει ξανά τα αμετάβλητα αρχεία.
Τι υπάρχει στο γράφημα
Ενότητα με τίτλο «Τι υπάρχει στο γράφημα»Είδη συμβόλων: function, method, class, field, enum, constructor, getter, setter, typedef, extension, mixin, variable.
Είδη ακμών: calls, imports, extends, implements, mixes in, references.
Οι κανονικές υπογραφές αυτών των εργαλείων βρίσκονται στα Εργαλεία MCP.
Σχετικοί οδηγοί
Ενότητα με τίτλο «Σχετικοί οδηγοί»- Προσθήκη αποθετηρίων σε χώρο εργασίας
- Υπολογισμός ελέγχου (κοόρτες και άξονες)
- Χρήση του διακομιστή MCP