diff --git a/queries/solidity/highlights.scm b/queries/solidity/highlights.scm index 14fd6c528..abb3ec3d0 100644 --- a/queries/solidity/highlights.scm +++ b/queries/solidity/highlights.scm @@ -32,7 +32,7 @@ (primitive_type) @type (contract_declaration name: (identifier) @type) (struct_declaration struct_name: (identifier) @type) -; (struct_member name: (identifier) @field) ;; Technically correct, but makes highlight worst +(struct_member name: (identifier) @field) (enum_declaration enum_type_name: (identifier) @type) ; Color payable in payable address conversion as type and not as keyword (payable_conversion_expression "payable" @type) @@ -63,14 +63,15 @@ ; Handles expressions like g(); (call_expression . (identifier) @function) +(function_definition + function_name: (identifier) @function) ; Handles the field in struct literals like MyStruct({MyField: MyVar * 2}) (call_expression (identifier) @field . ":") ; Function parameters (event_paramater name: (identifier) @parameter) -(function_definition - function_name: (identifier) @parameter) +(parameter name: (identifier) @parameter) ; Yul functions (yul_function_call function: (yul_identifier) @function) @@ -80,10 +81,10 @@ (meta_type_expression "type" @keyword) -(member_expression (property_identifier) @property) -(property_identifier) @property -(struct_expression ((identifier) @property . ":")) -(enum_value) @property +(member_expression (property_identifier) @field) +(property_identifier) @field +(struct_expression ((identifier) @field . ":")) +(enum_value) @constant ; Keywords @@ -98,16 +99,6 @@ "event" "using" "assembly" - "switch" - "case" - "default" - "break" - "continue" - "if" - "else" - "try" - "catch" - "return" "emit" "public" "internal" @@ -117,11 +108,9 @@ "view" "payable" "modifier" - "returns" "memory" "storage" "calldata" - "function" "var" (constant) (virtual) @@ -135,6 +124,28 @@ "do" ] @repeat +[ + "break" + "continue" + "if" + "else" + "switch" + "case" + "default" +] @conditional + +[ + "try" + "catch" +] @exception + +[ + "return" + "returns" +] @keyword.return + +"function" @keyword.function + "import" @include (import_directive "as" @include) (import_directive "from" @include) diff --git a/tests/query/highlights/solidity/test.sol b/tests/query/highlights/solidity/test.sol index aadf11b6d..42a335182 100644 --- a/tests/query/highlights/solidity/test.sol +++ b/tests/query/highlights/solidity/test.sol @@ -21,7 +21,7 @@ contract Ballot { // ^ type uint weight; // weight is accumulated by delegation // ^ type -// ^ variable +// ^ field bool voted; // if true, that person already voted address delegate; // person delegated to uint vote; // index of the voted proposal @@ -45,6 +45,9 @@ contract Ballot { // A dynamically-sized array of `Proposal` structs. Proposal[] public proposals; + enum ActionChoices { GoLeft, GoRight, GoStraight, SitStill } +// ^ constant + /// Create a new ballot to choose one of `proposalNames`. constructor(bytes32[] memory proposalNames) { // ^ constructor @@ -69,8 +72,9 @@ contract Ballot { // Give `voter` the right to vote on this ballot. // May only be called by `chairperson`. function giveRightToVote(address voter) external { -// ^ keyword +// ^ keyword.function // ^ function +// ^ parameter // If the first argument of `require` evaluates // to `false`, execution terminates and all // changes to the state and to Ether balances