ailisp / flute

A beautiful, easilly composable HTML5 generation library in Common Lisp
64 stars 7 forks source link

Can't use a built-in element such as "title" as argument in define-element #5

Open vindarel opened 4 years ago

vindarel commented 4 years ago

Hello,

I tried Flute (which looks great and easy to use, thanks and well done) and I stumbled across a symbol conflict.

I wanted to define an element which takes "title" as argument, but it is not possible:

(define-element page (title)
  (h (html (h1 title))))

throws:

; in: DEFINE-ELEMENT PAGE
;     (FLUTE:DEFINE-ELEMENT TESTFLUTE::PAGE
;         (TESTFLUTE::TITLE)
;       (FLUTE:H
;         (TESTFLUTE::HTML (TESTFLUTE::H1 TESTFLUTE::TITLE))))
; --> LET LET PROGN DEFUN PROGN SB-IMPL::%DEFUN SB-INT:NAMED-LAMBDA 
; --> FUNCTION BLOCK MULTIPLE-VALUE-BIND MULTIPLE-VALUE-CALL FUNCTION 
; --> LET SETF LET* LAMBDA FUNCTION 
; ==>
;   (LET ((TESTFLUTE::TITLE
;          (FLUTE:ATTR FLUTE:ATTRS
;                      (ALEXANDRIA.0.DEV:MAKE-KEYWORD 'TESTFLUTE::TITLE))))
;     (PROGN
;      (FLUTE:H
;        (TESTFLUTE::HTML (TESTFLUTE::H1 TESTFLUTE::TITLE)))))
; 
; caught STYLE-WARNING:
;   The variable TITLE is defined but never used.

; file: /tmp/slimeY8QlRC
; in: DEFINE-ELEMENT PAGE
;     (FLUTE:H
;       (TESTFLUTE::HTML (TESTFLUTE::H1 TESTFLUTE::TITLE)))
; --> PROGN FLUTE:HTML 
; ==>
;   (FLUTE:H1 FLUTE:TITLE)
; 
; caught WARNING:
;   undefined variable: FLUTE:TITLE
; 
; compilation unit finished
;   Undefined variable:
;     FLUTE:TITLE
;   caught 1 WARNING condition
;   caught 1 STYLE-WARNING condition

Using img as argument gives the same error, using id is OK (it is not a builtin).

Not being able to use "title" is problematic, being such common :/