El autocompletado de código es una función de autocompletado presente en muchos entornos de desarrollo integrados (IDE) que acelera el proceso de codificación de aplicaciones al corregir errores comunes y sugerir líneas de código. Esto suele ocurrir a través de ventanas emergentes mientras se escribe, consultando parámetros de funciones y sugerencias de consulta relacionadas con errores de sintaxis. El software de autocompletado de código moderno suele utilizar sistemas de inteligencia artificial generativa para predecir líneas de código. El autocompletado de código y las herramientas relacionadas sirven como documentación y desambiguación de nombres de variables , funciones y métodos , mediante análisis estático . [1] [2]
La función aparece en muchos entornos de programación. [3] [4] Las implementaciones incluyen IntelliSense en Visual Studio Code . El término se popularizó originalmente como "lista de selección" y algunas implementaciones aún se refieren a él como tal. [5]
El autocompletado inteligente de código, que es similar a otros sistemas de autocompletado , es una forma conveniente de acceder a las descripciones de las funciones, y en particular a sus listas de parámetros. La característica acelera el desarrollo de software al reducir la entrada de datos mediante el teclado y la necesidad de memorizar nombres. También permite que los usuarios consulten con menos frecuencia la documentación externa, ya que la documentación interactiva sobre muchos símbolos (es decir, variables y funciones) en el ámbito activo aparece dinámicamente en forma de información sobre herramientas . [6]
El autocompletado inteligente de código utiliza una base de datos en memoria generada automáticamente de clases, nombres de variables y otras construcciones que el código informático dado define o a las que hace referencia. La implementación "clásica" de IntelliSense funciona detectando caracteres marcadores como puntos (u otros caracteres separadores, según el lenguaje). Cuando el usuario escribe uno de estos caracteres inmediatamente después del nombre de una entidad que tiene uno o más miembros accesibles (como variables o funciones contenidas), IntelliSense sugiere coincidencias en un cuadro de diálogo emergente. El usuario puede aceptar la sugerencia escribiendo un carácter de autocompletado ( Tab ↹o ) o un marcador específico del lenguaje (como el punto y coma para C++ ), o continuar escribiendo el nombre. Con el tiempo, IntelliSense determina qué variable o función es más probable que necesite el usuario. IntelliSense también muestra una breve descripción de una función en la ventana emergente, según la cantidad de documentación en el código fuente de la función .↵ Enter
La función también permite a los usuarios seleccionar entre una serie de funciones sobrecargadas en lenguajes que admiten la programación orientada a objetos . Algunos programas de edición de código proporcionan la finalización inteligente del código a través de un servidor de Protocolo de servidor de lenguaje (LSP).
La investigación sobre la finalización inteligente de código comenzó en 1957, con correctores ortográficos para imágenes de mapa de bits de escritura cursiva y aplicaciones especiales para encontrar registros en bases de datos a pesar de las entradas incorrectas. En 1961, Les Earnest , quien dirigió la investigación sobre esta tecnología en ciernes, vio necesario incluir el primer corrector ortográfico que accediera a una lista de 10.000 palabras aceptables. [7] Ralph Gorin, un estudiante de posgrado bajo la dirección de Earnest en ese momento, creó el primer programa de corrección ortográfica verdadero escrito como una aplicación (en lugar de una investigación) para texto en inglés general. SPELL, para el DEC PDP-10 en el Laboratorio de Inteligencia Artificial (SAIL) de la Universidad de Stanford, se publicó en febrero de 1971. [8] Gorin escribió el programa en ensamblador para una acción más rápida; lo hizo buscando en una lista de palabras ortografías correctas plausibles que difieren en una sola letra o transposiciones de letras adyacentes, y presentándolas al usuario. Gorin hizo que SPELL fuera accesible al público, como se hizo con la mayoría de los programas SAIL, y pronto se difundió por todo el mundo a través de la entonces nueva ARPANET , aproximadamente una década antes de que las computadoras personales se generalizaran. [9] SPELL y sus algoritmos y estructuras de datos inspiraron el programa Unix Ispell .
IntelliSense es la implementación de Microsoft de la finalización de código, más conocida en Visual Studio . Se introdujo por primera vez como una característica de un producto principal de Microsoft en 1996 [10] basándose en muchos conceptos ya inventados de finalización de código y verificación de sintaxis, con Visual Basic 5.0 Control Creation Edition, que era esencialmente un prototipo disponible públicamente para Visual Basic 5.0. [11] Inicialmente, Visual Basic IDE era el "banco de pruebas" principal para la tecnología, pero IntelliSense se incorporó a Visual FoxPro y Visual C++ [12] en el marco temporal de Visual Studio 97 (una revisión después de verse por primera vez en Visual Basic). Debido a que se basaba en las capacidades de introspección de COM , las versiones de Visual Basic de IntelliSense siempre fueron más sólidas y completas que las versiones 5.0 y 6.0 (97 y 98 en la secuencia de nombres de Visual Studio) de Visual C++, que no tenían el beneficio de estar completamente basadas en COM. Estas deficiencias (criticadas por muchos desarrolladores de VC++ desde la versión 97) se han corregido en gran medida en las líneas de productos .NET . Por ejemplo, una de las capacidades más solicitadas que faltaba en los productos anteriores a .NET era la compatibilidad con plantillas , que ahora está completamente implementada. [13]
IntelliSense ha entrado en una nueva fase de desarrollo con el entorno unificado Visual Studio.NET lanzado por primera vez en 2001, aumentado por las capacidades de introspección y documentación de código más potentes proporcionadas por el marco .NET. IntelliSense ahora es compatible con los editores de Visual Studio para C++ , C# , J# , Visual Basic , XML , HTML y XSLT , entre otros. A partir de Visual Studio 2005 , IntelliSense ahora se activa de forma predeterminada cuando el usuario comienza a escribir, en lugar de requerir caracteres marcadores (aunque este comportamiento se puede desactivar). El IDE tiene la capacidad de inferir una mayor cantidad de contexto en función de lo que el desarrollador está escribiendo, hasta el punto de que las construcciones básicas del lenguaje como for y while también se incluyen en la lista de opciones. En 2017, Microsoft anunció IntelliCode, [14] que utiliza el aprendizaje automático para inferir exactamente qué característica del lenguaje o la biblioteca es probable que se desee en cada pulsación de tecla. Inicialmente disponible solo como una extensión para C#, se espera que se incorpore en futuras versiones de Visual Studio.
Visual Studio 2022 incluye funciones de inteligencia artificial, como GitHub Copilot , que puede sugerir automáticamente líneas completas de código según el contexto circundante.
Otros productos de Microsoft que incorporan IntelliSense son Expression Web , FrontPage 2003 , Small Basic , los IDE de Visual Basic para aplicaciones en los productos de Microsoft Office , Visual Studio Code y muchos otros. SQL Server 2008 Management Studio tiene función de autocompletar para la sintaxis SQL.
El IDE de Eclipse tiene herramientas de finalización de código que vienen incluidas con el programa. [15] [16] Incluye un soporte notable para la creación de código en Java, C++ y JavaScript. El proyecto Code Recommenders de Eclipse solía proporcionar una potente finalización inteligente, [17] pero debido a la falta de recursos, se abandonó en Eclipse 2018–12 y luego se archivó en julio de 2019. [18] [19] [20]
Vim Intellisense [21] es un sistema avanzado de finalización de código para el editor Vim .
Supongamos que una aplicación C++ que se está editando en Visual Studio tiene una clase Foo con algunas funciones miembro:
clase Foo { público : void bar (); void foo_bar ( char c , int n ); };
Cuando el desarrollador hace referencia a esta clase en el código fuente, por ejemplo:
Foo foo ; foo .
Tan pronto como el usuario escribe el punto después de foo
, IntelliSense automáticamente enumera todas las funciones miembro disponibles (es decir, bar()
y foo_bar()
) y todos los atributos miembro disponibles (los miembros privados y protegidos se pueden identificar mediante una imagen de candado junto a sus nombres). El usuario puede seleccionar uno utilizando las teclas de flecha y presionando un carácter de finalización cuando se resalta la función miembro correcta. Cuando está disponible, IntelliSense muestra una breve descripción de la función miembro tal como se proporciona en la documentación del código fuente.
IntelliSense va más allá al indicar los parámetros necesarios en otra ventana emergente a medida que el usuario los completa. A medida que el usuario escribe el nombre de una variable, la función también hace sugerencias para completar la variable a medida que se escribe. IntelliSense continúa mostrando parámetros, resaltando el pertinente, a medida que el usuario escribe.
El usuario puede "obligar" a IntelliSense a mostrar su lista emergente sin contexto mediante el uso de + o + . En Visual Studio, esto muestra todo el modelo de objetos del dominio de la aplicación disponible para el desarrollador.CtrlJCtrlSpace