i-slint-compiler 1.18.1

Internal Slint Compiler Library
Documentation
// Copyright © SixtyFPS GmbH <info@slint.dev>
// SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-2.0 OR LicenseRef-Slint-Software-3.0

export X := Rectangle {
//       ><warning{':=' to declare a component is deprecated. The new syntax declare components with 'component MyComponent {'. Read the documentation for more info}

    lay := GridLayout {
        property<string> foo: "hello";
        Row {
            Text {
                text: lay.foo + parent.width;
//                                     >   <error{Element 'Row' does not have a property 'width'}
                colspan: 1 + 1;
                rowspan: 2;
            }
            Text {
                row: 3;
//                   ><warning{The 'row' property cannot be used for elements inside a Row. This was accepted by previous versions of Slint, but may become an error in the future}
                col: -2;
//                   > <error{'col' must be a positive integer}
                rowspan: 2.2;
//                       >  <error{'rowspan' must be a positive integer}
                colspan: -1;
//                       > <error{'colspan' must be a positive integer}
                y: 0;
//                 ><error{The property 'y' cannot be set for elements placed in this layout, because the layout is already setting it}

                animate x { duration: 100ms; }
//                      ><error{The property 'x' cannot be set for elements placed in this layout, because the layout is already setting it}

                init => {
                    self.colspan = 45;
                }
            }
        }

        Row {
            Text {
                x: 12px;
//                 >   <error{The property 'x' cannot be set for elements placed in this layout, because the layout is already setting it}
            }}
        Text{
            row: 200000; // that's actually bigger than 65535
//               >     <error{'row' must be a positive integer}
            Rectangle { row: 3; }
//                           ><error{row used outside of a GridLayout's cell}
        }
    }

    lay2 := GridLayout {
        property<int> negative: -5;
        property<int> last_row: 4;
        Text {
            row: lay2.last_row;
            col: -lay2.negative; // check that a unary minus isn't necessary an error
        }
        Text {
//      >   <error{Cannot mix auto-numbering and runtime expressions for the 'col' property}
            row: 0; // mixing runtime expr and literal is ok
        }
    }

    lay3 := GridLayout {
        Text {
            row: lay2.last_row;
            col: lay2.last_row;
        }
        Text {
//      >   <error{Cannot mix auto-numbering and runtime expressions for the 'row' property}
            col: 1;
        }
    }

    Text { colspan: 3; }
//                  ><error{colspan used outside of a GridLayout's cell}
    col: 3;
//       ><error{col used outside of a GridLayout's cell}

    HorizontalLayout {
        col: 3;
//           ><error{col used outside of a GridLayout's cell}
    }

    flex := FlexboxLayout {
        Text {
            colspan: 1 + 1;
//                   >    <error{colspan used outside of a GridLayout's cell}
            rowspan: 2;
//                   ><error{rowspan used outside of a GridLayout's cell}
            row: 3;
//               ><error{row used outside of a GridLayout's cell}
            col: 2;
//               ><error{col used outside of a GridLayout's cell}
        }
    }

    lay4 := GridLayout {
        for _ in 5: Text {
            // Using row/col properties here is allowed, to be able to get row and col from a model
            row: 2;
            col: 3;
        }
        for _ in 5: Row {
            Rectangle {
                row: 1;
//                   ><error{The property 'row' cannot be set for elements placed in this layout, because the layout is already setting it}
                col: 2;
//                   ><error{The property 'col' cannot be set for elements placed in this layout, because the layout is already setting it}
                rowspan: 2;
                colspan: 2;
            }
        }
    }

    // Inside a `for`/`if`, setting one axis but not the other still has to
    // line up with the surrounding GridLayout's other children. This shape
    // (runtime `row`, auto-numbered `col` next to an auto-numbered sibling)
    // was silently accepted in older Slint versions; it is now reported but
    // only as a warning so that those files keep compiling.
    lay5 := GridLayout {
        for _[idx] in 5: Text {
//                       >   <warning{Cannot mix auto-numbering and runtime expressions for the 'col' property. This was accepted by previous versions of Slint, but may become an error in the future}
            row: idx;
        }
        Text { }
//      >   <warning{Cannot mix auto-numbering and runtime expressions for the 'row' property. This was accepted by previous versions of Slint, but may become an error in the future}
    }

    lay6 := GridLayout {
        if true: Text {
//               >   <warning{Cannot mix auto-numbering and runtime expressions for the 'col' property. This was accepted by previous versions of Slint, but may become an error in the future}
            row: lay2.last_row;
        }
        Text { }
//      >   <warning{Cannot mix auto-numbering and runtime expressions for the 'row' property. This was accepted by previous versions of Slint, but may become an error in the future}
    }

    // A single GridLayout that exercises both diagnostic levels. The first
    // child seeds the numbering with auto (its row is missing); the second
    // child has a runtime row only via piercing into the repeater body, so
    // its `col` is still auto and the mix is reported as a warning; the
    // third child has both row and col set directly so the lenient view
    // also flags the mix, and it is reported as a real error.
    lay7 := GridLayout {
        Text { col: 1; }
        for _[idx] in 5: Text {
            row: idx;
//               >  <warning{Cannot mix auto-numbering and runtime expressions for the 'row' property. This was accepted by previous versions of Slint, but may become an error in the future}
        }
        Text {
            row: lay2.last_row;
//               >            <error{Cannot mix auto-numbering and runtime expressions for the 'row' property}
            col: lay2.last_row;
        }
    }

    // Cover a mix of every shape that contributes a row/col classification:
    // a plain auto-numbered element, a `for` that introduces the first
    // runtime expression via piercing (warning), more auto siblings, a
    // static element with direct runtime row/col (error), two more auto
    // siblings, and finally an `if` with runtime row/col (warning).
    lay8 := GridLayout {
        Text { }
        for _[idx] in 3: Text {
            row: idx;
//               >  <warning{Cannot mix auto-numbering and runtime expressions for the 'row' property. This was accepted by previous versions of Slint, but may become an error in the future}
        }
        Text { }
        Text {
            row: lay2.last_row;
//               >            <error{Cannot mix auto-numbering and runtime expressions for the 'row' property}
            col: lay2.last_row;
        }
        Text { }
        Text { }
        if true: Text {
            row: lay2.last_row;
//               >            <warning{Cannot mix auto-numbering and runtime expressions for the 'row' property. This was accepted by previous versions of Slint, but may become an error in the future}
            col: lay2.last_row;
        }
    }
}