Diagnósticos
El compilador de HoopLang informa los problemas como diagnósticos: un
código, una gravedad, una posición (línea y columna) y un mensaje en inglés.
Los errores (E0xx) impiden compilar; las advertencias (W0xx)
dejan compilar e informan. Este capítulo describe el formato de salida, cómo
se informan los problemas de otros archivos y, para cada código que emite el
compilador, sus mensajes, cuándo se producen, un ejemplo verificado y cómo
corregirlo.
Códigos que existen hoy: E000, E001, E002, E003, E004, E006,
E007, W001, W003, W004, W006, W007, W008, W009 y W010. Los
números que faltan (E005, W002, W005) no los emite el compilador
actual.
Formato#
Cada diagnóstico se imprime en una línea:
<archivo>:<línea>:<columna>: <error|warning> <CÓDIGO>: <mensaje>e003.hoop:4:3: error E003: undeclared thread `negor`; did you mean `negro`?
w001.hoop:4:16: warning W001: shape of 1.00 mm²: under 1.5 mm² does not sew cleanly- Líneas y columnas empiezan en 1. La columna cuenta caracteres.
- El prefijo
<archivo>:lo agrega la herramienta (hoop check,hoop build); el diagnóstico en sí eslínea:columna: gravedad CÓDIGO: mensaje. - Un diagnóstico que no corresponde a una línea usa la posición 1:1 (por
ejemplo
missing design (or hoop) declaration). Los delhoopentero (the hoop is missing frame,the hoop places no designs) van en la línea de su declaración. - Los mensajes sugieren el nombre correcto cuando hay uno parecido (distancia
de edición de a lo más un tercio de su largo, o de 2 en los nombres
cortos, contando una trasposición
como un solo cambio) o cuando es un nombre anterior de una fuente
(
ArialNegrita→ArialBold):…; did you meannegro?. Si no hay uno parecido, muchos mensajes listan los valores válidos entre paréntesis. - En la API (WASM y Rust) cada diagnóstico es una estructura con
code,severity("Error"o"Warning"),pos(line,col) ymsg.
Cuántos se informan#
- Un error léxico o de sintaxis (
E000, y elE001de unidad desconocida, que detecta el analizador léxico) detiene el análisis: se informa sólo ese. - Los errores de tipos, nombres y reglas se juntan todos en una pasada.
- Un mismo diagnóstico en el mismo lugar se informa una vez (por ejemplo,
un error dentro de un
forde 100 vueltas). - Las dos ramas de un
ifse verifican; sus errores se informan aunque la rama no se borde. - Si una declaración falla (
shape s = …con un error), usarsdespués no repite el error; tampoco unframedesconocido arrastra errores por cadaplace. - Los límites (
E006del lienzo,W008,W009) yW007dependen de la geometría compilada: se revisan sólo si la verificación no encontró errores.
Diagnósticos de otros archivos#
Un problema dentro de un archivo importado (import) o colocado (place)
se informa en la línea del import o del place, con el código
original, y el mensaje lleva el archivo y la posición dentro de él:
in `<archivo>` <línea>:<columna>: <error|warning>: <mensaje original>h_noparam.hoop:4:3: error E001: in `parche.hoop` 1:1: error: `nombre` is String but it was given LengthCon varios niveles, los prefijos se encadenan, del más externo al más interno:
imp_lib.hoop:2:1: error E007: in `lib/ca.hoop` 1:1: error: in `lib/cb.hoop` 1:1: error: import cycle: lib/ca.hoop → lib/cb.hoop → lib/ca.hoopEl nombre de archivo es el que se escribió en el import o place. El
playground muestra estos diagnósticos también
en el archivo de origen, en su línea.
Errores#
E000 — sintaxis#
El texto no se puede analizar: un carácter, número, color o cadena mal escrito, o una construcción que no corresponde.
| Mensaje | Causa |
|---|---|
unexpected character c`` | Un carácter que no pertenece al lenguaje. |
unclosed string (missing closing quote) | Falta la comilla de cierre (en la misma línea). |
unclosed /* comment | Falta */. |
invalid number: … | Un número mal formado. |
a color is written #rrggbb (6 hex digits) | Un color sin seis dígitos hexadecimales. |
`x` is not a declaration (import, design, hoop, thread, const, shape or layer) | Una palabra desconocida en el nivel superior. |
`x` is not a primitive (fill, satin, run, triple or text) | Una palabra desconocida en una capa. |
`x` does not belong in a path (from, line, curve or close) | Un segmento de path desconocido. |
expected … | Falta un elemento: `:` after the property name, `at (x, y)`, `from "file"`, `in` (for x in 0..4, or for x in [a, b]), `}`, a value, the thread color (#rrggbb), … |
an if that gives a value needs else: if c { a } else { b } | Un if usado como valor sin else. |
import { … } needs at least one name | Una selección vacía. |
importing everything mixes names: … | La forma eliminada import "archivo". |
a hoop only places designs (move `fill` into a design file) | Una primitiva (o seq, inside, layer) directamente en un hoop. |
`seq` is not allowed inside `seq` (…), `place` is not allowed inside `seq` (…) | Lo que no puede ir en un seq (sí pueden for, if e inside). |
// error E000
design "D" { canvas: rect(size: (20mm, 20mm)) }
thread negro = #1c16e000a.hoop:2:16: error E000: a color is written #rrggbb (6 hex digits)// error E000
design "D" { canvas: rect(size: (20mm, 20mm)) }
thread negro = #1c1616
layer a {
relleno negro { shape: canvas }
}e000b.hoop:4:3: error E000: `relleno` is not a primitive (fill, satin, run, triple or text)Corrección: escribir la construcción como indica el mensaje (ver Léxico y Declaraciones).
E001 — tipo incorrecto#
Un valor no es del tipo que se espera, falta una unidad o una operación no existe entre esos tipos. Mensajes principales:
| Mensaje | Causa |
|---|---|
N has no unit: add mm, cm, deg or % | Un número con decimales sin unidad (los enteros sin unidad son Int). |
unknown unit u (use mm, cm, deg or %) | Unidad desconocida (léxico: detiene el análisis). |
`clave` is T, not U | Una propiedad con otro tipo (`angle` is Angle or auto, not Length). |
`x` is declared T but its value is U / … its default is U | const/param cuyo valor no calza con el tipo declarado. |
`x` is T but it was given U | Un argumento de place con otro tipo que su param. |
cannot compute T op U | Operación aritmética entre tipos incompatibles (2mm + 45deg). |
Int / Int has no whole result: use mod … | División entre enteros. |
shapes only support + (union), - (difference) and & (intersection) | Otro operador entre formas. |
cannot negate a T | - delante de algo que no se niega (se niegan Length, Angle, Ratio e Int). |
unknown type T (Length, Angle, …) | Una anotación de tipo que no existe (const a: Largo = 3mm). |
`clave` needs a unit (e.g. 15mm), `.m` needs a unit (e.g. 2mm) | Un entero sin unidad donde va una longitud, un ángulo o un Ratio (circle(…, r: 15), .inset(2)). |
a Point needs units: (1mm, 2mm) | Un punto escrito con enteros sin unidad. |
cannot compare T with U, T has no order (only ==, !=) | Comparaciones entre tipos distintos u orden sin sentido. |
and/or join Bool values, not …, not takes a Bool, not … | Lógica sobre no-Bool. |
a condition is a Bool (…), not T | Condición de un if que no es Bool. |
both branches of an if give the same type, not T and U | if como valor con ramas de distinto tipo. |
a Point is (Length, Length), not (T, U) | Un punto mal formado. |
expected a Shape, not T | Se pide una forma. |
a path takes Points (x, y), not T | Un segmento de path con algo que no es un punto. |
rails are two open Paths: … | rails de un satín mal formado. |
unknown method or invalid arguments: .m(…) (…) | Método de forma desconocido o con argumentos inválidos. |
rect(…), circle(…), grid(…), len(String or List) | Argumentos inválidos de una función (el mensaje es la firma). |
a range is Int..Int (for i in 0..4), for goes over a range (0..4) or a List, not T | for sobre algo que no es rango de enteros ni lista. |
`clave` is one of: a, b, … (not T) | Se esperaba un nombre de una lista (tela, ancla, fuente…). |
at takes a Point (x, y), not T | El at de un place. |
design arguments are named: place "x.hoop"(nombre: "ANA") | Argumento de place sin nombre. |
custom(width, height) takes two Length, frame: a catalog frame or custom(width, height) | Un frame mal escrito. |
// error E001
design "D" { canvas: rect(size: (20mm, 20mm)) }
thread negro = #1c1616
layer a {
fill negro { shape: canvas, angle: 2mm }
}e001a.hoop:4:31: error E001: `angle` is Angle or auto, not Length// error E001
design "D" { canvas: rect(size: (20mm, 20mm)) }
thread negro = #1c1616
layer a {
fill negro { shape: canvas, density: 0.4 }
}e001b.hoop:4:40: error E001: 0.4 has no unit: add mm, cm, deg or %// error E001
const x: Angle = 3mm
design "D" { canvas: rect(size: (20mm, 20mm)) }e001c.hoop:1:10: error E001: `x` is declared Angle but its value is LengthCorrección: dar el valor con el tipo y la unidad que pide la propiedad (ver Tipos y Expresiones).
E002 — valor fuera de rango#
El tipo es correcto pero el valor no está permitido: fuera del rango de una propiedad, un nombre que no está en la lista de valores válidos o un bucle demasiado largo.
| Mensaje | Causa |
|---|---|
`clave` = N mm: valid range is A to B mm | Una Length fuera de rango (width de satín 0.8–8 mm, density de relleno 0.2–1 mm, …; ver Primitivas). |
division by zero | / o mod con divisor cero (3mm / 0, i mod 0). |
`scale` must be greater than 0% | scale: de un place (o .scale(…)) en cero o negativo. |
`x` is not valid for clave; did you mean `y`? / … (a, b, …) | Un nombre fuera de la lista (fuente, tela, ancla, underlay, align, style). |
margin = N mm: 0 to 20 mm | margin de un design. |
fit: a design is 5 to 1000 mm | fit fuera de rango. |
unknown frame x (catalog: …) | Bastidor que no está en el catálogo. |
passes = N: odd, 1 to 7 (so it ends on the far side) | passes de triple. |
arc = N mm: the radius is at least 10 mm | arc de un texto. |
N iterations: a loop goes up to 1000 | Un for de más de 1000 vueltas. |
// error E002
design "D" { canvas: rect(size: (40mm, 20mm)) }
thread negro = #1c1616
layer a {
satin negro { border: canvas, width: 9mm }
}e002a.hoop:4:33: error E002: `width` = 9 mm: valid range is 0.8 to 8 mm// error E002
design "D" { canvas: rect(size: (40mm, 20mm)) }
thread negro = #1c1616
layer a {
text negro { value: "ANA", height: 8mm, at: (5mm, 15mm), font: ArialNegrita }
}e002b.hoop:4:60: error E002: `ArialNegrita` is not valid for font; did you mean `ArialBold`?Corrección: usar un valor dentro del rango o de la lista indicada (ver Catálogos). Un satín más ancho que 8 mm se borda mejor como relleno.
Límites de recursos#
E002 también rechaza entradas que exceden los presupuestos del compilador o del formateador. No se modifica el diseño para hacerlo pasar: se debe reducir la entrada o dividir el proyecto.
| Recurso | Límite |
|---|---|
| Archivo fuente | 8 MiB UTF-8 |
| Tokens por archivo (sin EOF) | 2 000 000 |
| Nombre, incluido un nombre calificado | 256 caracteres |
| Cadena literal | 4096 caracteres de fuente |
Texto de una primitiva text | 512 caracteres |
| Árbol de expresión o valor | 64 niveles (el parser además acota sus llamadas recursivas) |
| Anidamiento del formateador | 64 delimitadores |
| Salida formateada | 8 MiB, para que pueda volver a leerse |
| Valor evaluado | 200 000 elementos/caracteres/vértices en total |
| Evaluación de un archivo, incluidos bucles anidados y ramas descartadas | 10 000 000 pasos |
| Objetos de diseño/compilados | 20 000 |
| Trabajo estimado de cosido, acumulado entre objetos y componentes | unos 2,5 millones de puntadas (el mensaje dice cuántas estima) |
Dependencias import/place anidadas | 16 niveles |
| Archivos cargados en una compilación | 128 lecturas; las bibliotecas además tienen una caché acotada |
| Magnitud absoluta de Length, Angle, Ratio y coordenadas | 1 000 000, siempre finita |
Los enteros no se envuelven al desbordarse: integer overflow es E002 tanto
en debug como en release. Un fit que produciría coordenadas no finitas
también es E002. La carga que excede el presupuesto de lecturas se informa
como un error del cargador (E007, file loading exceeds … reads).
Los valores exactos viven en crates/hoop/src/limits.rs y se ejercitan en
resource_limits; ver pruebas de robustez.
E003 — hilo no declarado#
Una primitiva usa un hilo que no está declarado con thread ni importado.
undeclared thread `x`; did you mean `y`?
undeclared thread `x` (declare it with thread)// error E003
design "D" { canvas: rect(size: (20mm, 20mm)) }
thread negro = #1c1616
layer a {
fill negor { shape: canvas }
}e003.hoop:4:3: error E003: undeclared thread `negor`; did you mean `negro`?Corrección: declarar el hilo (thread negor = #rrggbb), corregir el
nombre o importarlo (ver Módulos). Un color suelto en lugar
del hilo (fill #000000 { … }) es E000.
E004 — geometría inválida o vacía#
Una forma, camino o texto que no se puede bordar.
| Mensaje | Causa |
|---|---|
the shape is empty | Una forma de área cero. |
a closed shape is required: the path is missing close | Un path abierto donde se pide una forma. |
a closed path needs at least 3 points | Un path cerrado con menos de tres puntos. |
a path needs at least 2 points | Un camino de un solo punto. |
a path starts with from (x, y), from goes only at the start of the path, nothing can follow close | Segmentos de path en mal orden. |
rect with zero or negative size, circle with zero or negative radius, polygon needs at least 3 Points | Funciones de forma con medidas imposibles. |
run along a shape needs a single piece (this shape has several) | Un corrido sobre una forma de varias piezas. |
empty text | value: "". |
the text box is empty | Un box sin área. |
could not build the satin border (is the shape narrower than the width?) | Un satín de borde imposible (al compilar). |
`x.hoop` has nothing to sew | Un diseño colocado que no cose nada. |
the hoop places no designs | Un hoop sin place que se coloque (en la línea del hoop). |
// error E004
design "D" { canvas: rect(size: (20mm, 20mm)) }
thread negro = #1c1616
layer a {
fill negro { shape: path { from (0mm, 0mm) line (5mm, 0mm) line (5mm, 5mm) } }
}e004.hoop:4:23: error E004: a closed shape is required: the path is missing closeCorrección: cerrar el camino con close, dar medidas positivas o
separar la forma en piezas.
E006 — fuera de los límites#
Algo cosido queda fuera de su espacio: el canvas de un diseño (menos su
margin), el área útil de un bastidor (menos su margin) o la caja de un
texto.
| Mensaje | Dónde |
|---|---|
KIND overflows the canvas by D mm SIDE / … the canvas minus its M mm margin … | Un objeto de un design (KIND es fill, satin, run, triple, text o place; SIDE es on the left, on the right, at the top, at the bottom o near (x, y) en un lienzo curvo). Tolerancia: 0.3 mm. |
(X, Y) mm is outside the frame's sewing area minus its margin | El at de un place en un hoop. |
`x.hoop` spans (x0, y0)–(x1, y1) mm, outside the sewing area minus its M mm margin (W × H mm frame) | Lo cosido de un diseño colocado en un hoop. |
text does not fit its box: at the minimum height (H mm) it measures W × H mm, the box is W × H mm | Un texto con box que no cabe ni a su altura mínima. |
// error E006
design "D" {
canvas: rect(size: (40mm, 20mm))
margin: 2mm
}
thread negro = #1c1616
layer a {
fill negro { shape: rect(at: (30mm, 5mm), size: (15mm, 5mm)) }
}e006.hoop:7:3: error E006: fill overflows the canvas minus its 2 mm margin by 7.0 mm on the rightEn un hoop:
// error E006
hoop "H" {
frame: Brother_100x100
place "cuadro.hoop" at (12mm, 50mm)
}h_e006b.hoop:3:3: error E006: `cuadro.hoop` spans (2.0, 40.0)–(22.0, 60.0) mm, outside the sewing area minus its 5 mm margin (100 × 100 mm frame)(cuadro.hoop es un cuadrado de 20 × 20 mm; ver Bastidor.)
Corrección: mover o achicar el objeto, ampliar el canvas o reducir el
margin; en un texto con box, acortar el texto, ampliar la caja o bajar
min_height.
E007 — nombres y estructura#
Un nombre repetido, desconocido o mal usado, una propiedad que no existe o que falta, o un archivo que no se puede usar.
Nombres y propiedades:
| Mensaje | Causa |
|---|---|
unknown name `x`; did you mean `y`? / unknown name `x` | Un nombre suelto que no es nada declarado (const, shape, param, thread, variable de for, nombre importado) ni un valor de enumerado conocido (fuente, tela, ancla, auto…). Si la declaración de x falló, no se repite el error en cada uso. |
`x` is used before it is declared (line N) | Un nombre que se declara más abajo en el archivo. |
unknown name `canvas`: declare it in the design (…) | canvas en un diseño sin canvas:. |
`x` is already defined | Nombre declarado dos veces. |
layer x is already defined | Dos capas con el mismo nombre. |
the loop variable `x` hides another name: choose another | Variable de for que tapa otro nombre. |
K has no `clave`; did you mean `c`? / K has no clave (…) | Propiedad desconocida de una primitiva (fill has no densty; …). |
a design has no `clave` …, a hoop has no `clave` (frame, fabric, margin, origin), place has no `clave` (anchor, rotate, scale), a thread has no `clave` (brand, code) | Propiedad desconocida de una declaración. |
`width` no longer scales the design: … (también height) | Propiedades eliminadas del design: usar canvas o fit. |
a shape has no `.m` … | Miembro de forma desconocido. |
unknown function f (rect, circle, polygon, grid, len) | Función desconocida. |
K is missing a or b, K: only one of a, b | Falta la propiedad obligatoria o sobran alternativas (satin is missing rails or border or along). |
duplicate `clave` | Propiedad repetida en una primitiva, un design, un hoop o un place, o argumento repetido de un place. |
a satin with border or along needs width | Satín sin width. |
text needs height, or a box to fit into, a text with box is placed by its box: remove at``, a text in an arc does not fit a box: use at and height, min_height is for a text with box | Combinaciones inválidas de text. |
Estructura del archivo:
| Mensaje | Causa |
|---|---|
missing design (or hoop) declaration | Un archivo que se compila sin design ni hoop (en 1:1). |
a file has a single design (or a single hoop) | Dos design/hoop. |
the hoop is missing frame | hoop sin frame (en la línea del hoop). Un frame desconocido da sólo su E002, sin más errores por cada place. |
a hoop places designs with place; layers go in each design's file | layer en un archivo hoop. |
a hoop only places designs (place, for); stitches go in a design | Primitiva, seq o inside dentro de un if/for de un hoop. Directamente en el hoop es E000 a hoop only places designs (move fill into a design file). |
only a design compiles directly; a hoop places design files | (API) compilar un hoop con compile en vez de montarlo. |
Archivos (import y place, ver Módulos):
| Mensaje | Causa |
|---|---|
cannot read `f`: … | Archivo inexistente o ilegible. |
`f` is not a library: it has a design (only thread, const, shape and import) | import de un archivo con design, hoop o layer. |
`f` has no `x`; did you mean `y`? | Nombre que la biblioteca no exporta. |
`x` is already imported from `f`; rename one of them (`as` in the import) | Nombre local igual a uno importado. |
`x` is already imported from `f` | Dos import traen el mismo nombre. |
import cycle: a → b → a, place cycle: a → b → a | Ciclos. El de place se informa tal cual en el place de más afuera (sin el prefijo in …). |
`f` is a hoop; place takes design files | place de un hoop. |
`f` has no param `x`; did you mean `y`?, `f` has no params | Argumento de place que no es param. |
import needs file access (compile with a file loader) | (API) import verificado sin cargador de archivos. |
// error E007
design "D" { canvas: rect(size: (20mm, 20mm)) }
thread negro = #1c1616
layer a {
fill negro { shape: canvas, densty: 0.4mm }
}e007a.hoop:4:31: error E007: fill has no `densty`; did you mean `density`?// error E007
design "D" { canvas: rect(size: (20mm, 20mm)) }
thread negro = #1c1616
thread negro = #000000e007b.hoop:3:1: error E007: `negro` is already definedCorrección: renombrar (o usar as en el import), corregir la clave
según la sugerencia, agregar la propiedad que falta o corregir la ruta.
Advertencias#
W001 — detalle demasiado chico#
shape of A mm²: under 1.5 mm² does not sew cleanly: la forma de un fill
o de un satin con border tiene menos de 1.5 mm² de área.
design "D" { canvas: rect(size: (20mm, 20mm)) }
thread negro = #1c1616
layer a {
fill negro { shape: rect(at: (2mm, 2mm), size: (1mm, 1mm)) }
}w001.hoop:4:16: warning W001: shape of 1.00 mm²: under 1.5 mm² does not sew cleanly
w001.hoop: ok — 1 threads, 1 layers, 1 objectsCorrección: agrandar el detalle, borrarlo o hacerlo con un corrido.
W003 — satín ancho#
W mm satin: from 7 mm on, split it or use fill: un satín de más de 7 mm de
ancho (hasta 8 mm es válido; desde ahí es E002). Las puntadas largas se
enganchan y no cubren parejo.
design "D" { canvas: rect(size: (40mm, 30mm)) }
thread negro = #1c1616
layer a {
satin negro { border: canvas, width: 7.5mm }
}w003.hoop:4:33: warning W003: 7.5 mm satin: from 7 mm on, split it or use fill
w003.hoop: ok — 1 threads, 1 layers, 1 objectsCorrección: bajar width a 7 mm o menos, o usar fill.
W004 — texto más chico que el mínimo de su fuente#
text H mm high is below the minimum for FUENTE (M mm): its letters do not sew cleanly: un texto con height (sin box) más bajo que el alto mínimo
de su fuente (el mismo que usa box como piso; ver Texto). Con
place … scale:, si el achicado deja un texto bajo ese mínimo, se informa
en el place: at scale S%, text in x.hoop is H mm high, below the minimum for FUENTE (M mm).
design "D" { canvas: rect(size: (40mm, 20mm)) }
thread negro = #1c1616
layer a {
text negro { value: "ABC", font: ArialBold, height: 4mm, at: (5mm, 12mm) }
}w004.hoop:4:3: warning W004: text 4 mm high is below the minimum for ArialBold (6 mm): its letters do not sew cleanly
w004.hoop: ok — 1 threads, 1 layers, 1 objectsCorrección: subir height, o usar una fuente con un mínimo menor.
W006 — diseños de un bastidor que se pisan#
`a.hoop` overlaps `b.hoop` by A mm²: dos diseños de un hoop tienen
más de 0.5 mm² de huella en común. Se informa en el place posterior.
hoop "H" {
frame: Brother_100x100
place "cuadro.hoop" at (40mm, 50mm)
place "cuadro.hoop" at (50mm, 50mm)
}h_w006.hoop:4:3: warning W006: `cuadro.hoop` overlaps `cuadro.hoop` by 200.0 mm²
h_w006.hoop: ok — 2 designs, 1 threads, 2 objectsCorrección: separar los at, si el solape no es intencional.
W007 — caracteres que la fuente no tiene#
FUENTE has no c, …: left out of the text: el texto tiene caracteres que
la fuente no trae; no se bordan (los espacios no cuentan).
design "D" { canvas: rect(size: (60mm, 20mm)) }
thread negro = #1c1616
layer a {
text negro { value: "TÉ 中", font: Arial, height: 8mm, at: (5mm, 14mm) }
}w007.hoop:4:3: warning W007: Arial has no `中`: left out of the text
w007.hoop: ok — 1 threads, 1 layers, 1 objectsCorrección: quitar esos caracteres o elegir una fuente que los tenga.
W008 — diseño sin lienzo#
no canvas: bounds are not checked; the design measures W × H mm (declare canvas: rect(size: (Wmm, Hmm))): el design no declara canvas, así que
no se revisa que lo cosido quede dentro de un espacio. Se informa en la línea
del design.
design "D" { fabric: Twill }
thread negro = #1c1616
layer a {
fill negro { shape: rect(at: (0mm, 0mm), size: (30mm, 20mm)) }
}w008.hoop:1:1: warning W008: no canvas: bounds are not checked; the design measures 30.0 × 20.0 mm (declare `canvas: rect(size: (30mm, 20mm))`)
w008.hoop: ok — 1 threads, 1 layers, 1 objectsCorrección: declarar canvas, por ejemplo el que propone el mensaje.
W009 — fuera de su contenedor#
KIND overflows its container nombre (inside at L:C) by D mm SIDE (o … overflows the inside shape at L:C … si el contenedor no es un nombre): un
objeto dentro de un bloque inside se sale de su forma (tolerancia 0.3 mm).
design "D" { canvas: rect(size: (40mm, 40mm)) }
thread negro = #1c1616
shape caja = rect(at: (5mm, 5mm), size: (20mm, 20mm))
layer a {
inside caja {
fill negro { shape: rect(at: (10mm, 10mm), size: (20mm, 5mm)) }
}
}w009.hoop:6:5: warning W009: fill overflows its container `caja` (inside at 5:3) by 5.0 mm on the right
w009.hoop: ok — 1 threads, 1 layers, 1 objectsCorrección: mover o achicar el objeto, o agrandar el contenedor.
W010 — propiedad sin efecto todavía#
Una propiedad que se acepta y se valida, pero que el compilador actual no
usa: `rungs` is not used yet: the satin follows its rails without them (en un satin).
design "D" { canvas: rect(size: (40mm, 20mm)) }
thread negro = #1c1616
layer a {
satin negro {
rails: (path { from (5mm, 5mm) line (35mm, 5mm) }, path { from (5mm, 9mm) line (35mm, 9mm) })
rungs: [path { from (20mm, 5mm) line (20mm, 9mm) }]
}
}w010.hoop:6:5: warning W010: `rungs` is not used yet: the satin follows its rails without them
w010.hoop: ok — 1 threads, 1 layers, 1 objectsCorrección: quitar la propiedad (no cambia las puntadas).
Avisos de máquina (sin código)#
Al producir los archivos (hoop build, descargas del playground), el motor
revisa los límites de cada formato de máquina y del bastidor declarado
(frame de un design o de un hoop). Estos avisos no tienen código ni
línea; hoop build los imprime como <archivo>:<error|warning> (FORMATO): mensaje o <archivo>:<error|warning>: mensaje. No detienen la
escritura de los archivos, pero si alguno es error, hoop build termina
con código de salida 1:
design "Grande" { canvas: rect(size: (120mm, 40mm)), frame: Brother_100x100 }
thread negro = #1c1616
layer a { fill negro { shape: canvas } }$ hoop build grande.hoop out
grande.hoop:error: the design is 120.4 × 39.8 mm and does not fit the 100 × 100 mm frame
grande.hoop: 120.4 × 39.8 mm, 7338 stitches, 1 threads, 1 trims, 21 mshoop check revisa el frame de un design sin coser, con la caja de los
objetos (puede diferir en décimas de lo bordado), y termina con 1:
$ hoop check grande.hoop
grande.hoop: error: the design is 120.0 × 40.0 mm and does not fit the 100 × 100 mm frameLos demás avisos de máquina (colores por formato, puntadas largas, saltos
JEF) dependen de las puntadas: sólo los da hoop build.