Γιατί η Swift χρειάζεται κάτι περισσότερο από αναζήτηση σε αρχεία
Η Swift απλώνει έναν τύπο σε πολλά σημεία. Ένα struct δηλώνεται σε ένα αρχείο, παίρνει συμπεριφορά από επεκτάσεις σε τρία άλλα και συμμορφώνεται σε πρωτόκολλα που ορίζονται σε ένα πακέτο. Οι αλλαγές κατάστασης κρύβονται σε υπολογιζόμενες ιδιότητες και σε παρατηρητές willSet / didSet. Ένας πράκτορας που διαβάζει ένα αρχείο τη φορά χάνει τα περισσότερα από αυτά.
Το Maguyva ευρετηριάζει αυτή τη δομή, ώστε ο πράκτορας να βλέπει μαζί τα μέλη ενός τύπου, τις συμμορφώσεις του και όσους τον καλούν.
Τι εξάγει το Maguyva από τη Swift
Το Maguyva καλύπτει .swift. Τα καλέσιμα σύμβολα περιλαμβάνουν συναρτήσεις, init και deinit, subscripts, getters και setters υπολογιζόμενων ιδιοτήτων, καθώς και παρατηρητές willSet / didSet, ώστε ο κώδικας που αλλάζει κατάσταση να αναζητείται ως σύμβολο και όχι να χάνεται μέσα στα σώματα των ιδιοτήτων.
Τα μέλη που δηλώνονται σε structs, enums, πρωτόκολλα και επεκτάσεις προσδιορίζονται από τον τύπο-κάτοχό τους (για παράδειγμα CartStore.add), και τα μέλη που προστίθενται σε μια επέκταση αποδίδονται στον τύπο που επεκτείνεται. Από τα ονόματα ορισμών αφαιρούνται οι γενικές παράμετροι, οι λίστες συμμόρφωσης σε πρωτόκολλα και οι κατάληξεις ? / !, οπότε οι αναζητήσεις χρησιμοποιούν το απλό όνομα. Οι κλήσεις διατηρούν το self. και τον προσδιορισμό κλάσης, και τα τελικά κλεισίματα μετρούν στον αριθμό ορισμάτων της κλήσης.
Ο γράφος καταγράφει κλήσεις, συμμόρφωση σε πρωτόκολλα, κληρονομικότητα, επικαλύψεις, δημιουργία στιγμιοτύπων, attributes, αναφορές τύπων, αναγνώσεις και εγγραφές, καθώς και ακμές throw.
Παραδείγματα προτροπών για πράκτορες
- «Ποιοι τύποι συμμορφώνονται στο
PaymentProvider και πού δημιουργείται ο καθένας;» (dependency_search)
- «Ποιος καλεί το
CartStore.add και από ποιες προβολές;» (find_symbol, μετά dependency_search incoming)
- «Εξήγησε πώς μια ειδοποίηση ώθησης φτάνει στην οθόνη των εισερχομένων.» (
get_task_context)
Γνωστοί περιορισμοί
- Αντιστοιχίζεται μόνο πηγαίος κώδικας
.swift. Τα αρχεία Storyboard και XIB δεν περιλαμβάνονται στη λίστα επεκτάσεων, οπότε οι συνδέσεις του Interface Builder μένουν εκτός γράφου.
- Οι κλήσεις της τυπικής βιβλιοθήκης και του Foundation, όπως
print, debugPrint, NSLog και ισχυρισμοί, φιλτράρονται από τις σχέσεις, οπότε δεν είναι ακμές του γράφου. Για αυτές χρησιμοποιήστε το text_pattern_search.
Επόμενα βήματα
Συνδέστε ένα αποθετήριο με τον γρήγορο οδηγό εκκίνησης και έπειτα δείτε τον πίνακα υποστήριξης στη σελίδα συμβατότητας. Αν διαθέτετε το ίδιο προϊόν και σε Android, διαβάστε τον οδηγό για την Kotlin.