Hola Habr!
El equipo de CLion tiene muchas buenas noticias: la parte del equipo de San Petersburgo, junto con otros colegas, se mudó con éxito a una nueva oficina, se nos unieron nuevos desarrolladores geniales y, lo que es más importante, ¡el otro día, lanzamos la primera gran actualización de este año,
CLion 2019.1 !
El trabajo en la nueva versión se realizó en varios frentes a la vez:
- Mejoras en el soporte del lenguaje C ++ : resaltado de código a través de Clangd, mejoras en la refactorización de Extraer y Renombrar, una nueva verificación de que una función miembro de una clase puede declararse estática.
- Más opciones para configurar el estilo para escribir código : integración con ClangFormat, soporte para estilos de nombres variables en C / C ++, soporte para diferentes estilos para protectores de encabezado.
- Nuevas características y mejoras del depurador : visualización del estado de la memoria - Vista de memoria - para punteros, visualización del código desmontado en caso de LLDB, acelerando el trabajo de depuración paso a paso.
- CLion para microcontroladores , los primeros pasos.
- Capacidad para crear objetivos de compilación y configuraciones para iniciar / depurar en CLion, que de ninguna manera están relacionados con el modelo del proyecto.
- Trabaja con otros lenguajes de programación en literales de cadena en C / C ++.
- Nuevos temas visuales y otras características de la plataforma.

Lea más sobre estas y otras innovaciones a continuación. Y para probar nuevas funciones y mejoras, descargue la versión gratuita de 30 días de CLion
desde nuestro sitio web .
Soporte de lenguaje C ++
Clangd
Como ya sabe, en CLion hay dos herramientas para admitir el lenguaje C ++: una es completamente propia y la segunda se basa en Clangd. Trabajan juntos, se complementan y comparten la información necesaria. Al mismo tiempo, si el rendimiento y el criterio de integridad funcional lo permiten, ahora estamos tratando de transferir herramientas inteligentes para trabajar con código C ++ en CLion a una herramienta basada en Clangd. Todavía no estamos hablando de la refactorización del código, pero el resaltado del código en 2019.1 ya se realizó sobre la base de Clangd. Esto mejoró significativamente la capacidad de respuesta del editor.
Unos pocos lanzamientos, cambiamos CLion a una herramienta basada en Clangd cuando mostramos errores en el editor. Ahora el texto del error se muestra con más detalle. Esto es útil, por ejemplo, cuando se depuran errores relacionados con la sobrecarga de funciones:

A esto se agrega la capacidad de calcular la posición de una posible solución (solución rápida) también a través de Clangd. La solución en sí es proporcionada directamente por la propia herramienta de CLion.
Otra área interesante de nuestro trabajo es escribir nuevas verificaciones en la herramienta de análisis de código Clangd. A partir de CLion 2019.1, una nueva comprobación para el código C ++ le indicará cuándo una función miembro de una clase puede declararse estática:

Por cierto, la administración de la configuración de esta herramienta alternativa en Clangd se puede encontrar en Configuración / Preferencias | Idiomas y marcos | C / C ++ | Clangd
Herramienta de análisis de código personalizado
La productividad del editor es una de nuestras principales prioridades. Además de muchas pequeñas mejoras, en esta versión vale la pena señalar una mejora significativa en el tiempo de indexación inicial del proyecto. No siempre sucede, pero en los casos en que usa las mismas bibliotecas para sus proyectos: CLion puede notar esto automáticamente y reutilizar los símbolos de estas bibliotecas para un nuevo proyecto abierto que las use. Cuando se trata de STL o Boost, ¡las mejoras son muy notables!
Nuestros planes para este año son aumentar la precisión y exactitud de nuestra refactorización para C ++. Comenzamos con los dos más básicos: Renombrar y Extraer. Para Extracto, arreglamos muchos casos en los que el resultado de refactorización resultó ser incorrecto debido a calificadores de espacio de nombres considerados incorrectamente (por ejemplo,
std::
, especialización de plantillas y nombres de tipo anulados (alias de tipo).
En relación con Rename, prestamos atención al caso cuando hay un cambio de nombre de una clase o estructura que coincide con el nombre del archivo en el que se encuentran. Anteriormente, siempre cambiamos el nombre del archivo también, pero ahora CLion le pregunta sobre el resultado preferido durante la refactorización. Puede cambiar el nombre o puede dejar el nombre del archivo anterior. Lo contrario también funciona: cambiar el nombre del archivo no conduce a un cambio de nombre incondicional de la clase. (En algún lugar aquí debería haber gritos de la audiencia: "¡Finalmente!")

Y, por cierto, un poco más adelante hablaré sobre la capacidad de establecer estilos de protectores de encabezado. Por lo tanto, si el protector de encabezado utilizado en el archivo sigue la plantilla de estilo especificada y al mismo tiempo el nombre del archivo renombrado está en su nombre, ¡CLion también actualizará el protector de encabezado!
Estilos de codificación
En la versión 2019.1, agregamos la capacidad de cambiar a ClangFormat para formatear el código en CLion. Esto incluye no solo la acción de formateo en sí (
Ctrl+Alt+L
en Windows / Linux,
⌥⌘L
en macOS) o el autoformato al imprimir el código, sino también el formateo previo al generar código usando las herramientas de CLion, al refactorizar y aplicar arreglos (arreglos rápidos). En general, donde sea que el IDE formatee el código, se llamará a ClangFormat.
Puede cambiar a ClangFormat globalmente - en Configuración / Preferencias | Editor | Código de estilo. Y solo puedes para un proyecto específico. Además, si se encuentra un archivo de configuración de
formato .clang en el proyecto, CLion ofrecerá cambiar a ClangFormat usando este archivo de configuración:

Un poco más de detalles se pueden encontrar
en nuestro blog (en inglés).
Nombrar variables, tipos y otros caracteres en el código es un tema complejo, a veces incluso filosófico. Pero en el mundo de la programación (para mejorar la legibilidad del código), los estilos de nombres se han inventado durante mucho tiempo. Hay estilo LLVM, hay Qt, hay Google. Por lo tanto, en la configuración CLion Settings / Preferences | Editor | Código de estilo | C / C ++ ahora tiene una nueva pestaña: Convención de nomenclatura, en la que puede elegir uno de los estilos predefinidos o personalizar el suyo estableciendo el estilo de nomenclatura para varios tipos de caracteres (macros, funciones globales, miembros de clase, parámetros, variables locales, etc.). La convención seleccionada se usará en todas las acciones IDE: generación de código, refactorización, correcciones automáticas, etc. Además, si desea monitorear con mayor precisión la implementación de las reglas de nomenclatura, puede habilitar la nueva verificación de nomenclatura inconsistente, que mostrará nombres que no coinciden con las reglas, y sugerirá la opción de cambio de nombre:

En la misma pestaña, puede encontrar la configuración de estilo de los protectores de encabezado que mencioné anteriormente:

Por cierto, si prefiere usar
#pragma
, simplemente ajuste la plantilla para los nuevos archivos de encabezado en Configuración / Preferencias | Editor | Plantillas de archivos y códigos.
Depurador
Ver vista de memoria
Finalmente conseguimos ver la memoria en el depurador. En la versión actual, puede ver la memoria por puntero: simplemente haga clic en cualquier punto en el panel Variables durante la depuración y solicite una Vista de memoria (
Ctrl+Enter
en Windows / Linux,
⌘Enter
en macOS). Y si la pestaña de vista de memoria está abierta durante la depuración paso a paso, puede ver los cambios resaltados en la memoria:

Los cambios de UI / UX ya están planeados para la próxima versión, pero primero me gustaría recopilar comentarios de los usuarios. Entonces escribe!
Desmontaje en caso de LLDB
El código del ensamblador ahora está dividido por función y, lo más importante, se muestra no solo en el caso de GDB, sino también para LLDB.

Sin embargo, vale la pena señalar que el código de ensamblador todavía se muestra solo en los casos en que no hay códigos fuente para la función. El llamado modo de
desmontaje a pedido aún no es compatible.
Rendimiento de depuración paso a paso
A veces, la depuración paso a paso se retrasa debido al largo cálculo de variables en cada paso. Pero, después de todo, a veces estos cálculos no son necesarios para nadie: ¡quiero pasar rápidamente por un área del código en pasos, ocasionalmente mirando los valores de un par de variables! Ahora en CLion existe la oportunidad de deshabilitar el recuento de variables durante la depuración paso a paso: las
variables de silencio en el menú contextual del depurador hacen exactamente eso. Y cuando necesite calcular y mostrar los valores, puede hacer clic en
Cargar en la variable:

CLion para microcontroladores
Ilya Motor (
elmot ) ya escribió
aquí en Habré sobre el complemento para la integración de CLion con STM32CubeMX y el soporte del depurador OpenOCD. A finales del año pasado, Ilya se unió a nuestro equipo y ya había logrado actualizar significativamente el complemento y moverlo dentro de CLion.

Puede encontrar
una publicación de blog bastante grande y detallada sobre el complemento actualizado en
nuestro blog . Aquí describiré lo más importante que ahora se puede hacer:
- En el cuadro de diálogo Nuevo proyecto, puede crear el proyecto STM32CubeMX ( .ioc ).
- Directamente desde CLion, ejecute STM32CubeMX para el proyecto para actualizar la configuración del microcontrolador y generar código para el proyecto.
- CLion generará el archivo CMake correcto para trabajar con este proyecto.
- CLion sugerirá elegir un archivo de configuración para hardware (configuración de placa).
- Para la depuración con OpenOCD, debe crear una configuración del tipo especial "OpenOCD Download and Run". Para el proyecto STM32CubeMX, CLion creará uno solo. ¡Habiendo especificado todas las configuraciones, puede depurar en el microcontrolador directamente desde CLion!
Ilya tiene muchos planes ambiciosos, por lo que sus comentarios son muy importantes para nosotros. Por lo tanto, si está interesado en desarrollar sistemas embebidos en CLion, ¡lo esperamos en los comentarios!
Diseñar objetivos y configuraciones independientes
Hace algún tiempo, Gradle C ++ y la base de datos de compilación ampliaron la lista de modelos de diseño compatibles en CLion. Hubo problemas con este último, porque el formato no incluye información sobre el ensamblaje de todo el proyecto, por lo que ni el ensamblaje, ni el lanzamiento, ni la depuración del proyecto en el caso de una base de datos de compilación fueron posibles. Sí, y solo en el caso del conocido modelo de proyecto CLion, a veces desea tener un objetivo que simplemente es ensamblado por algún equipo en la terminal.
Ahora, para tales casos, hay objetivos personalizados (Configuración / Preferencias | Compilación, ejecución, implementación | Objetivos de compilación personalizados) y Configuraciones de ejecución / depuración personalizadas (Ejecutar | Editar configuraciones ...). En el caso de un objetivo, debe establecer los parámetros de las herramientas externas (herramientas externas), que se utilizarán al crear y limpiar el proyecto:

Y en el caso de una configuración independiente del proyecto, para el lanzamiento y la depuración, debe especificar el destino, el archivo ejecutable y los argumentos deseados para ejecutar:

Lenguaje inyectado
¿Tiene literales de cadena en su código que contienen una consulta SQL, código HTML o expresión regular? Si es así, seguramente le gustaría al menos resaltar el código dentro del literal de acuerdo con su origen. Ahora es posible! Puede incluir temporalmente otro idioma en un literal de cadena simplemente presionando
Alt+Enter
y seleccionando la opción "Inyectar idioma o referencia". Ahora seleccionamos el idioma que necesitamos y, más recientemente, en el literal de cadena habitual, aparece el resaltado del idioma seleccionado, así como todas las acciones especiales. El ejemplo más llamativo son las expresiones regulares y la capacidad de verificar que las cadenas cumplan directamente con ellas en el IDE:

Y mucho mas
Los productos en JetBrains generalmente no son creados por un pequeño equipo, sino por el equipo de toda la plataforma relevante. Por lo tanto, CLion obtiene funciones de IntelliJ IDEA, WebStorm, AppCode, DataGrip, PyCharm, etc. En esta versión, estas mejoras incluyen lo siguiente:
- Vea todos los lugares en el código del proyecto donde el desarrollador realizó algunos cambios o simplemente leyó el código - Ventana emergente de ubicaciones recientes (
Shift+Ctrl+E
en Win / Lin, ⇧⌘E
en macOS). - Creación de nuevos temas para el IDE, además de la luz estándar, la oscuridad (Darcula) y el contraste (Alto contraste). Puede encontrar ejemplos de dichos complementos y un tutorial paso a paso en nuestra documentación .
- Hablando de complementos. Si escribe en Rust, probablemente sepa que hay un complemento IntelliJ Rust. En CLion, su versión incluye soporte de Cargo y un depurador. Y con la nueva versión, el complemento tiene herramientas para perfilar código en Linux y macOS, la capacidad de autocompletar caracteres aún no importados, así como otras mejoras.
Eso es todo por ahora. ¡Gracias si lees hasta el final!
Demo
Bueno, y el video tradicional sobre las nuevas características de CLion 2019.1 (en inglés):
¡Preguntas, deseos, informes de errores y solo pensamientos expresados en los comentarios! Estaremos encantados de responder.
Su equipo JetBrains CLionEl impulso para desarrollar