SlideShare una empresa de Scribd logo
Buenos Aires - Crystal Meetup #1
Herramientas
uso y creación
Brian J. Cardiff
bcardiff@manas.com.ar
Tipos de herramientas
❖ Entrada
❖ Archivos planos
❖ Resultado del parsing
❖ Resultado de compilación
❖ Salida
❖ Información sobre el código
❖ Modificación del código
Tipos de herramientas
Archivos
planos
Resultado
del parsing
Resultado de
inferencia y/o
compilación
Información
sobre el
código
Tamaño
Archivos.
Dependencia
de archivos via
regex
Información de
jerarquía de clases,
etc.
Tipos de variables,
Invocaciones,
Implementaciones
Modificación
del código
¡NO! Formatter
Refactor semántico
🎩✨🐰🎉❤
¿alguien?
Herramientas actuales
$	
  crystal	
  tool	
  
Usage: crystal tool [tool] [switches] [program file] [--] [arguments]
format format project, directories and/or files
hierarchy show type hierarchy
types show type of main variables
context show context for given location
implementations show implementations for given call in location
Types
sample.cr	
  
class	
  Person	
  
	
  	
  property	
  name	
  
	
  	
  property	
  age	
  
	
  	
  def	
  initialize(@name,	
  @age)	
  
	
  	
  end	
  
end	
  
p	
  =	
  Person.new("John",	
  35)	
  
n	
  =	
  p.name
$	
  crystal	
  tool	
  types	
  sample.cr	
  	
  
p	
  :	
  Person	
  
n	
  :	
  String
Implementations
sample-­‐impl.cr	
  
class	
  Foo	
  
	
  	
  def	
  hi	
  
	
  	
  	
  	
  "I'm	
  a	
  foo"	
  
	
  	
  end	
  
end	
  
class	
  Bar	
  
	
  	
  def	
  hi	
  
	
  	
  	
  	
  "I'm	
  a	
  bar"	
  
	
  	
  end	
  
end	
  
obj	
  =	
  rand	
  <	
  0.5	
  ?	
  Foo.new	
  :	
  Bar.new	
  
obj.hi	
  
$	
  crystal	
  tool	
  implementations	
  -­‐-­‐cursor	
  
sample-­‐impl.cr:14:6	
  sample-­‐impl.cr	
  
2	
  implementations	
  found	
  
./sample-­‐impl.cr:2:3	
  
./sample-­‐impl.cr:8:3	
  
‸
༓
༓
Context
sample-­‐context.cr	
  
class	
  Foo	
  
	
  	
  def	
  set(a)	
  
	
  	
  	
  	
  r	
  =	
  a	
  +	
  a	
  
	
  	
  	
  	
  r	
  
	
  	
  end	
  
end	
  
class	
  Bar	
  
	
  	
  def	
  set(a)	
  
	
  	
  	
  	
  a	
  
	
  	
  end	
  
end	
  
obj	
  =	
  rand	
  <	
  0.5	
  ?	
  Foo.new	
  :	
  Bar.new	
  
obj.set("a	
  string")	
  
obj.set(1)	
  if	
  obj.is_a?(Foo)	
  
obj.set(1.5)	
  if	
  obj.is_a?(Bar)	
  
$	
  crystal	
  tool	
  context	
  -­‐-­‐cursor	
  sample-­‐
context.cr:4:5	
  sample-­‐context.cr	
  
2	
  possible	
  contexts	
  found	
  
|	
  Expr	
  |	
  Type	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  |	
  
-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐	
  
|	
  self	
  |	
  	
  Foo	
  	
  	
  |	
  	
  Foo	
  	
  |	
  
|	
  a	
  	
  	
  	
  |	
  String	
  |	
  Int32	
  |	
  
|	
  r	
  	
  	
  	
  |	
  String	
  |	
  Int32	
  |	
  
‸
Demo: Contar variables de instancia
require	
  "compiler/crystal/**"	
  
include	
  Crystal	
  
filename	
  =	
  File.expand_path(...)	
  
compiler	
  =	
  Compiler.new	
  
compiler.no_codegen	
  =	
  true	
  
source	
  =	
  Compiler::Source.new(filename,	
  File.read(filename))	
  
result	
  =	
  compiler.compile(source,	
  “not	
  used	
  due	
  to	
  no	
  codegen”)	
  
pp	
  result	
  #	
  =>	
  Crystal::Compiler::Result	
  
pp	
  result.program.types.values	
  #	
  =>	
  Array(Crystal::Type+)
https://github.com/bcardiff/crystal-tool-demo
Integración con editores
❖ Salida para consola, sin estructura
❖ a parsear o mostrar directamente
❖ JSON, CSV, etc.
❖ intercambiar datos con el editor
❖ posibilidad de mejores interacciones
❖ http://crystal-lang.org/2015/09/05/tools.html
Ecosistema de Editores
❖ Vim
❖ https://github.com/rhysd/vim-crystal
❖ Atom
❖ https://github.com/manastech/atom-crystal-tools
❖ https://github.com/atom-crystal
❖ Sublime
❖ https://github.com/manastech/sublime-crystal
¡Gracias!
Brian J. Cardiff
email: bcardiff@manas.com.ar
twitter: @bcardiff

Más contenido relacionado

Similar a Crystal: herramientas, uso y creación.

04 j flex
04 j flex04 j flex
04 j flex
Karyamel Ml
 
C ++.ppt
C ++.pptC ++.ppt
Libreria c++
Libreria c++Libreria c++
Taller de flex y bison
Taller de flex y bisonTaller de flex y bison
Taller de flex y bison
Fabricio Galárraga
 
Java 8 - Nuevas características
Java 8 - Nuevas característicasJava 8 - Nuevas características
Java 8 - Nuevas características
Fernando Petrola
 
Objetivo 01 Archivos de Texto
Objetivo 01 Archivos de TextoObjetivo 01 Archivos de Texto
Objetivo 01 Archivos de Texto
nakaryortegaleon
 
PERSISTENCIA BASADA EN ARCHIVOS
PERSISTENCIA BASADA EN ARCHIVOSPERSISTENCIA BASADA EN ARCHIVOS
PERSISTENCIA BASADA EN ARCHIVOS
Darwin Durand
 
Gestion de archivos
Gestion de archivosGestion de archivos
Gestion de archivos
Cesar Oswaldo Osorio Agualongo
 
03. Introduccion a JavaScript y JQuery
03. Introduccion a JavaScript y JQuery03. Introduccion a JavaScript y JQuery
03. Introduccion a JavaScript y JQuery
Danae Aguilar Guzmán
 
Lab archivos
Lab archivosLab archivos
23 sparql
23 sparql23 sparql
Bibliotecas existentes para_c_
Bibliotecas existentes para_c_Bibliotecas existentes para_c_
Bibliotecas existentes para_c_
erickaagarciarosales
 
Curso prog sist
Curso prog sistCurso prog sist
Curso prog sist
Tony Potter
 
S2-EDD-1.2 Paso de estructuras y punteros a funciones, recursividad
S2-EDD-1.2 Paso de estructuras y punteros a funciones, recursividadS2-EDD-1.2 Paso de estructuras y punteros a funciones, recursividad
S2-EDD-1.2 Paso de estructuras y punteros a funciones, recursividad
Luis Fernando Aguas Bucheli
 
Taller de Shell Scripting
Taller de Shell ScriptingTaller de Shell Scripting
Taller de Shell Scripting
Enrique Verdes
 
8 herramientas de procesos de string
8  herramientas de procesos de string8  herramientas de procesos de string
8 herramientas de procesos de string
victdiazm
 
Semana 8 herramientas de procesos de string
Semana 8  herramientas de procesos de stringSemana 8  herramientas de procesos de string
Semana 8 herramientas de procesos de string
victdiazm
 
Lenguaje
LenguajeLenguaje
Lenguaje
Fernando Solis
 
C++ y sus librerias
C++ y sus libreriasC++ y sus librerias
8. Uso De Variables De Tipo Referencia
8.  Uso De Variables De Tipo Referencia8.  Uso De Variables De Tipo Referencia
8. Uso De Variables De Tipo Referencia
Esteban Soraire
 

Similar a Crystal: herramientas, uso y creación. (20)

04 j flex
04 j flex04 j flex
04 j flex
 
C ++.ppt
C ++.pptC ++.ppt
C ++.ppt
 
Libreria c++
Libreria c++Libreria c++
Libreria c++
 
Taller de flex y bison
Taller de flex y bisonTaller de flex y bison
Taller de flex y bison
 
Java 8 - Nuevas características
Java 8 - Nuevas característicasJava 8 - Nuevas características
Java 8 - Nuevas características
 
Objetivo 01 Archivos de Texto
Objetivo 01 Archivos de TextoObjetivo 01 Archivos de Texto
Objetivo 01 Archivos de Texto
 
PERSISTENCIA BASADA EN ARCHIVOS
PERSISTENCIA BASADA EN ARCHIVOSPERSISTENCIA BASADA EN ARCHIVOS
PERSISTENCIA BASADA EN ARCHIVOS
 
Gestion de archivos
Gestion de archivosGestion de archivos
Gestion de archivos
 
03. Introduccion a JavaScript y JQuery
03. Introduccion a JavaScript y JQuery03. Introduccion a JavaScript y JQuery
03. Introduccion a JavaScript y JQuery
 
Lab archivos
Lab archivosLab archivos
Lab archivos
 
23 sparql
23 sparql23 sparql
23 sparql
 
Bibliotecas existentes para_c_
Bibliotecas existentes para_c_Bibliotecas existentes para_c_
Bibliotecas existentes para_c_
 
Curso prog sist
Curso prog sistCurso prog sist
Curso prog sist
 
S2-EDD-1.2 Paso de estructuras y punteros a funciones, recursividad
S2-EDD-1.2 Paso de estructuras y punteros a funciones, recursividadS2-EDD-1.2 Paso de estructuras y punteros a funciones, recursividad
S2-EDD-1.2 Paso de estructuras y punteros a funciones, recursividad
 
Taller de Shell Scripting
Taller de Shell ScriptingTaller de Shell Scripting
Taller de Shell Scripting
 
8 herramientas de procesos de string
8  herramientas de procesos de string8  herramientas de procesos de string
8 herramientas de procesos de string
 
Semana 8 herramientas de procesos de string
Semana 8  herramientas de procesos de stringSemana 8  herramientas de procesos de string
Semana 8 herramientas de procesos de string
 
Lenguaje
LenguajeLenguaje
Lenguaje
 
C++ y sus librerias
C++ y sus libreriasC++ y sus librerias
C++ y sus librerias
 
8. Uso De Variables De Tipo Referencia
8.  Uso De Variables De Tipo Referencia8.  Uso De Variables De Tipo Referencia
8. Uso De Variables De Tipo Referencia
 

Último

SISTESIS RETO4 Grupo4 co-creadores .ppsx
SISTESIS RETO4 Grupo4 co-creadores .ppsxSISTESIS RETO4 Grupo4 co-creadores .ppsx
SISTESIS RETO4 Grupo4 co-creadores .ppsx
tamarita881
 
Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...
Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...
Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...
AMADO SALVADOR
 
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador ValenciaCatalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
AMADO SALVADOR
 
modelosdeteclados-230114024527-aa2c9553.pptx
modelosdeteclados-230114024527-aa2c9553.pptxmodelosdeteclados-230114024527-aa2c9553.pptx
modelosdeteclados-230114024527-aa2c9553.pptx
evelinglilibethpeafi
 
Sitios web 3.0 funciones ventajas y desventajas
Sitios web 3.0 funciones ventajas y desventajasSitios web 3.0 funciones ventajas y desventajas
Sitios web 3.0 funciones ventajas y desventajas
paulroyal74
 
Estructuras básicas_ conceptos de programación (1).docx
Estructuras básicas_ conceptos de programación  (1).docxEstructuras básicas_ conceptos de programación  (1).docx
Estructuras básicas_ conceptos de programación (1).docx
SamuelRamirez83524
 
TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....
TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....
TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....
bendezuperezjimena
 
Manual de soporte y mantenimiento de equipo de cómputo
Manual de soporte y mantenimiento de equipo de cómputoManual de soporte y mantenimiento de equipo de cómputo
Manual de soporte y mantenimiento de equipo de cómputo
doctorsoluciones34
 
herramientas de sitio web 3.0 2024
herramientas de sitio web 3.0  2024herramientas de sitio web 3.0  2024
herramientas de sitio web 3.0 2024
julio05042006
 
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVATECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
LilibethEstupian
 
Desarrollo de habilidades de pensamiento (2).pdf
Desarrollo de habilidades de pensamiento (2).pdfDesarrollo de habilidades de pensamiento (2).pdf
Desarrollo de habilidades de pensamiento (2).pdf
samuelvideos
 
Manual de Soporte y mantenimiento de equipo de cómputos
Manual de Soporte y mantenimiento de equipo de cómputosManual de Soporte y mantenimiento de equipo de cómputos
Manual de Soporte y mantenimiento de equipo de cómputos
cbtechchihuahua
 
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfTRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
thomasdcroz38
 
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
marianabz2403
 
maestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdfmaestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdf
JimmyTejadaSalizar
 
Informe DATA & IA 2024 Primera encuesta sobre el uso de IA en las empresas pe...
Informe DATA & IA 2024 Primera encuesta sobre el uso de IA en las empresas pe...Informe DATA & IA 2024 Primera encuesta sobre el uso de IA en las empresas pe...
Informe DATA & IA 2024 Primera encuesta sobre el uso de IA en las empresas pe...
alejandromanuelve
 
Estructuras básicas_ conceptos básicos de programación.pdf
Estructuras básicas_  conceptos básicos de programación.pdfEstructuras básicas_  conceptos básicos de programación.pdf
Estructuras básicas_ conceptos básicos de programación.pdf
ItsSofi
 
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
sarasofiamontezuma
 
Trabajo tecnología sobre Conceptos Básicos De Programación
Trabajo tecnología sobre Conceptos Básicos De ProgramaciónTrabajo tecnología sobre Conceptos Básicos De Programación
Trabajo tecnología sobre Conceptos Básicos De Programación
SofiaCollazos
 
Informació Projecte Iniciativa TIC SOPRA STERIA.pdf
Informació Projecte Iniciativa TIC SOPRA STERIA.pdfInformació Projecte Iniciativa TIC SOPRA STERIA.pdf
Informació Projecte Iniciativa TIC SOPRA STERIA.pdf
Festibity
 

Último (20)

SISTESIS RETO4 Grupo4 co-creadores .ppsx
SISTESIS RETO4 Grupo4 co-creadores .ppsxSISTESIS RETO4 Grupo4 co-creadores .ppsx
SISTESIS RETO4 Grupo4 co-creadores .ppsx
 
Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...
Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...
Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...
 
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador ValenciaCatalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
 
modelosdeteclados-230114024527-aa2c9553.pptx
modelosdeteclados-230114024527-aa2c9553.pptxmodelosdeteclados-230114024527-aa2c9553.pptx
modelosdeteclados-230114024527-aa2c9553.pptx
 
Sitios web 3.0 funciones ventajas y desventajas
Sitios web 3.0 funciones ventajas y desventajasSitios web 3.0 funciones ventajas y desventajas
Sitios web 3.0 funciones ventajas y desventajas
 
Estructuras básicas_ conceptos de programación (1).docx
Estructuras básicas_ conceptos de programación  (1).docxEstructuras básicas_ conceptos de programación  (1).docx
Estructuras básicas_ conceptos de programación (1).docx
 
TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....
TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....
TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....
 
Manual de soporte y mantenimiento de equipo de cómputo
Manual de soporte y mantenimiento de equipo de cómputoManual de soporte y mantenimiento de equipo de cómputo
Manual de soporte y mantenimiento de equipo de cómputo
 
herramientas de sitio web 3.0 2024
herramientas de sitio web 3.0  2024herramientas de sitio web 3.0  2024
herramientas de sitio web 3.0 2024
 
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVATECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
 
Desarrollo de habilidades de pensamiento (2).pdf
Desarrollo de habilidades de pensamiento (2).pdfDesarrollo de habilidades de pensamiento (2).pdf
Desarrollo de habilidades de pensamiento (2).pdf
 
Manual de Soporte y mantenimiento de equipo de cómputos
Manual de Soporte y mantenimiento de equipo de cómputosManual de Soporte y mantenimiento de equipo de cómputos
Manual de Soporte y mantenimiento de equipo de cómputos
 
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfTRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
 
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
 
maestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdfmaestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdf
 
Informe DATA & IA 2024 Primera encuesta sobre el uso de IA en las empresas pe...
Informe DATA & IA 2024 Primera encuesta sobre el uso de IA en las empresas pe...Informe DATA & IA 2024 Primera encuesta sobre el uso de IA en las empresas pe...
Informe DATA & IA 2024 Primera encuesta sobre el uso de IA en las empresas pe...
 
Estructuras básicas_ conceptos básicos de programación.pdf
Estructuras básicas_  conceptos básicos de programación.pdfEstructuras básicas_  conceptos básicos de programación.pdf
Estructuras básicas_ conceptos básicos de programación.pdf
 
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
 
Trabajo tecnología sobre Conceptos Básicos De Programación
Trabajo tecnología sobre Conceptos Básicos De ProgramaciónTrabajo tecnología sobre Conceptos Básicos De Programación
Trabajo tecnología sobre Conceptos Básicos De Programación
 
Informació Projecte Iniciativa TIC SOPRA STERIA.pdf
Informació Projecte Iniciativa TIC SOPRA STERIA.pdfInformació Projecte Iniciativa TIC SOPRA STERIA.pdf
Informació Projecte Iniciativa TIC SOPRA STERIA.pdf
 

Crystal: herramientas, uso y creación.

  • 1. Buenos Aires - Crystal Meetup #1 Herramientas uso y creación Brian J. Cardiff bcardiff@manas.com.ar
  • 2. Tipos de herramientas ❖ Entrada ❖ Archivos planos ❖ Resultado del parsing ❖ Resultado de compilación ❖ Salida ❖ Información sobre el código ❖ Modificación del código
  • 3. Tipos de herramientas Archivos planos Resultado del parsing Resultado de inferencia y/o compilación Información sobre el código Tamaño Archivos. Dependencia de archivos via regex Información de jerarquía de clases, etc. Tipos de variables, Invocaciones, Implementaciones Modificación del código ¡NO! Formatter Refactor semántico 🎩✨🐰🎉❤ ¿alguien?
  • 4. Herramientas actuales $  crystal  tool   Usage: crystal tool [tool] [switches] [program file] [--] [arguments] format format project, directories and/or files hierarchy show type hierarchy types show type of main variables context show context for given location implementations show implementations for given call in location
  • 5. Types sample.cr   class  Person      property  name      property  age      def  initialize(@name,  @age)      end   end   p  =  Person.new("John",  35)   n  =  p.name $  crystal  tool  types  sample.cr     p  :  Person   n  :  String
  • 6. Implementations sample-­‐impl.cr   class  Foo      def  hi          "I'm  a  foo"      end   end   class  Bar      def  hi          "I'm  a  bar"      end   end   obj  =  rand  <  0.5  ?  Foo.new  :  Bar.new   obj.hi   $  crystal  tool  implementations  -­‐-­‐cursor   sample-­‐impl.cr:14:6  sample-­‐impl.cr   2  implementations  found   ./sample-­‐impl.cr:2:3   ./sample-­‐impl.cr:8:3   ‸ ༓ ༓
  • 7. Context sample-­‐context.cr   class  Foo      def  set(a)          r  =  a  +  a          r      end   end   class  Bar      def  set(a)          a      end   end   obj  =  rand  <  0.5  ?  Foo.new  :  Bar.new   obj.set("a  string")   obj.set(1)  if  obj.is_a?(Foo)   obj.set(1.5)  if  obj.is_a?(Bar)   $  crystal  tool  context  -­‐-­‐cursor  sample-­‐ context.cr:4:5  sample-­‐context.cr   2  possible  contexts  found   |  Expr  |  Type                      |   -­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐   |  self  |    Foo      |    Foo    |   |  a        |  String  |  Int32  |   |  r        |  String  |  Int32  |   ‸
  • 8. Demo: Contar variables de instancia require  "compiler/crystal/**"   include  Crystal   filename  =  File.expand_path(...)   compiler  =  Compiler.new   compiler.no_codegen  =  true   source  =  Compiler::Source.new(filename,  File.read(filename))   result  =  compiler.compile(source,  “not  used  due  to  no  codegen”)   pp  result  #  =>  Crystal::Compiler::Result   pp  result.program.types.values  #  =>  Array(Crystal::Type+) https://github.com/bcardiff/crystal-tool-demo
  • 9. Integración con editores ❖ Salida para consola, sin estructura ❖ a parsear o mostrar directamente ❖ JSON, CSV, etc. ❖ intercambiar datos con el editor ❖ posibilidad de mejores interacciones ❖ http://crystal-lang.org/2015/09/05/tools.html
  • 10. Ecosistema de Editores ❖ Vim ❖ https://github.com/rhysd/vim-crystal ❖ Atom ❖ https://github.com/manastech/atom-crystal-tools ❖ https://github.com/atom-crystal ❖ Sublime ❖ https://github.com/manastech/sublime-crystal
  • 11. ¡Gracias! Brian J. Cardiff email: bcardiff@manas.com.ar twitter: @bcardiff