Package-Aware Approach for Repository-Level Code Completion in Pharo
Omar Abedelkader, Stéphane Ducasse, Oleksandr Zaitsev, Romain Robbes, Guillermo Polito
TL;DR
Pharo's Complishon historically treated the global namespace as flat, which hindered relevance in large repositories. The authors introduce a repository-level, package-aware completion heuristic that prioritizes entities from the current package, then related packages, and finally the global namespace, implemented via extension points in Complishon. They evaluate the approach using a prefix-based benchmark adapted from Robbes et al., measuring $MRR$ and $NDCG$ across multiple Pharo frameworks, and find meaningful $MRR$ gains in several contexts (notably Spec and Iceberg) with mixed results in others, especially for test packages and longer prefixes. The work demonstrates that leveraging project structure can yield more contextually appropriate suggestions and points to future work including dependency-aware scoping and hybrid ranking models to handle cross-package usage patterns. Overall, the approach promises reduced typing effort and cognitive load for developers working in modular Pharo codebases.
Abstract
Pharo offers a sophisticated completion engine based on semantic heuristics, which coordinates specific fetchers within a lazy architecture. These heuristics can be recomposed to support various activities (e.g., live programming or history usage navigation). While this system is powerful, it does not account for the repository structure when suggesting global names such as class names, class variables, or global variables. As a result, it does not prioritize classes within the same package or project, treating all global names equally. In this paper, we present a new heuristic that addresses this limitation. Our approach searches variable names in a structured manner: it begins with the package of the requesting class, then expands to other packages within the same repository, and finally considers the global namespace. We describe the logic behind this heuristic and evaluate it against the default semantic heuristic and one that directly queries the global namespace. Preliminary results indicate that the Mean Reciprocal Rank (MRR) improves, confirming that package-awareness completions deliver more accurate and relevant suggestions than the previous flat global approach.
