; inherits: cpp

((identifier) @function.builtin
  (#any-of? @function.builtin
    ; Digital I/O
    "digitalRead" "digitalWrite" "pinMode"
    ; Analog I/O
    "analogRead" "analogReference" "analogWrite"
    ; Zero, Due & MKR Family
    "analogReadResolution" "analogWriteResolution"
    ; Advanced I/O
    "noTone" "pulseIn" "pulseInLong" "shiftIn" "shiftOut" "tone"
    ; Time
    "delay" "delayMicroseconds" "micros" "millis"
    ; Math
    "abs" "constrain" "map" "max" "min" "pow" "sq" "sqrt"
    ; Trigonometry
    "cos" "sin" "tan"
    ; Characters
    "isAlpha" "isAlphaNumeric" "isAscii" "isControl" "isDigit" "isGraph" "isHexadecimalDigit"
    "isLowerCase" "isPrintable" "isPunct" "isSpace" "isUpperCase" "isWhitespace"
    ; Random Numbers
    "random" "randomSeed"
    ; Bits and Bytes
    "bit" "bitClear" "bitRead" "bitSet" "bitWrite" "highByte" "lowByte"
    ; External Interrupts
    "attachInterrupt" "detachInterrupt"
    ; Interrupts
    "interrupts" "noInterrupts"))

((identifier) @type.builtin
  (#any-of? @type.builtin "Serial" "SPI" "Stream" "Wire" "Keyboard" "Mouse" "String"))

((identifier) @constant.builtin
  (#any-of? @constant.builtin "HIGH" "LOW" "INPUT" "OUTPUT" "INPUT_PULLUP" "LED_BUILTIN"))

(function_definition
  (function_declarator
    declarator: (identifier) @function.builtin)
  (#any-of? @function.builtin "loop" "setup"))

(call_expression
  function: (primitive_type) @function.builtin)

(call_expression
  function: (identifier) @constructor
  (#any-of? @constructor "SPISettings" "String"))

(declaration
  (type_identifier) @type.builtin
  (function_declarator
    declarator: (identifier) @constructor)
  (#eq? @type.builtin "SPISettings"))
