aboutsummaryrefslogtreecommitdiffstats
path: root/runtime/queries/pascal
diff options
context:
space:
mode:
authorChristian Clason <c.clason@uni-graz.at>2023-06-12 09:54:30 -0600
committerChristian Clason <c.clason@uni-graz.at>2025-05-12 18:43:40 +0200
commit692b051b09935653befdb8f7ba8afdb640adf17b (patch)
tree167162b6b129ae04f68c5735078521a72917c742 /runtime/queries/pascal
parentfeat(c-family): inherit injections (diff)
downloadnvim-treesitter-692b051b09935653befdb8f7ba8afdb640adf17b.tar
nvim-treesitter-692b051b09935653befdb8f7ba8afdb640adf17b.tar.gz
nvim-treesitter-692b051b09935653befdb8f7ba8afdb640adf17b.tar.bz2
nvim-treesitter-692b051b09935653befdb8f7ba8afdb640adf17b.tar.lz
nvim-treesitter-692b051b09935653befdb8f7ba8afdb640adf17b.tar.xz
nvim-treesitter-692b051b09935653befdb8f7ba8afdb640adf17b.tar.zst
nvim-treesitter-692b051b09935653befdb8f7ba8afdb640adf17b.zip
feat!: drop modules, general refactor and cleanup
Diffstat (limited to 'runtime/queries/pascal')
-rw-r--r--runtime/queries/pascal/folds.scm31
-rw-r--r--runtime/queries/pascal/highlights.scm524
-rw-r--r--runtime/queries/pascal/indents.scm33
-rw-r--r--runtime/queries/pascal/injections.scm5
-rw-r--r--runtime/queries/pascal/locals.scm54
5 files changed, 647 insertions, 0 deletions
diff --git a/runtime/queries/pascal/folds.scm b/runtime/queries/pascal/folds.scm
new file mode 100644
index 000000000..8fcde3ac0
--- /dev/null
+++ b/runtime/queries/pascal/folds.scm
@@ -0,0 +1,31 @@
+[
+ (interface)
+ (implementation)
+ (initialization)
+ (finalization)
+ (if)
+ (ifElse)
+ (while)
+ (repeat)
+ (for)
+ (foreach)
+ (try)
+ (case)
+ (caseCase)
+ (asm)
+ (with)
+ (declVar)
+ (declConst)
+ (declEnum)
+ (declProcRef)
+ (declExports)
+ (declProcRef)
+ (declType)
+ (defProc)
+ (declField)
+ (declProp)
+ (comment)
+] @fold
+
+(interface
+ (declProc) @fold)
diff --git a/runtime/queries/pascal/highlights.scm b/runtime/queries/pascal/highlights.scm
new file mode 100644
index 000000000..d6014ee1d
--- /dev/null
+++ b/runtime/queries/pascal/highlights.scm
@@ -0,0 +1,524 @@
+; -- Keywords
+[
+ (kProgram)
+ (kLibrary)
+ (kUnit)
+ (kBegin)
+ (kEnd)
+ (kAsm)
+ (kVar)
+ (kThreadvar)
+ (kConst)
+ (kConstref)
+ (kResourcestring)
+ (kOut)
+ (kType)
+ (kLabel)
+ (kExports)
+ (kProperty)
+ (kRead)
+ (kWrite)
+ (kImplements)
+ (kClass)
+ (kInterface)
+ (kObject)
+ (kRecord)
+ (kObjcclass)
+ (kObjccategory)
+ (kObjcprotocol)
+ (kArray)
+ (kFile)
+ (kString)
+ (kSet)
+ (kOf)
+ (kHelper)
+ (kInherited)
+ (kGeneric)
+ (kSpecialize)
+ (kFunction)
+ (kProcedure)
+ (kConstructor)
+ (kDestructor)
+ (kOperator)
+ (kReference)
+ (kInterface)
+ (kImplementation)
+ (kInitialization)
+ (kFinalization)
+ (kTry)
+ (kExcept)
+ (kFinally)
+ (kRaise)
+ (kOn)
+ (kCase)
+ (kWith)
+ (kGoto)
+] @keyword
+
+[
+ (kFor)
+ (kTo)
+ (kDownto)
+ (kDo)
+ (kWhile)
+ (kRepeat)
+ (kUntil)
+] @keyword.repeat
+
+[
+ (kIf)
+ (kThen)
+ (kElse)
+] @keyword.conditional
+
+[
+ (kPublished)
+ (kPublic)
+ (kProtected)
+ (kPrivate)
+ (kStrict)
+ (kRequired)
+ (kOptional)
+] @keyword.modifier
+
+[
+ (kPacked)
+ (kAbsolute)
+] @keyword.modifier
+
+(kUses) @keyword.import
+
+; -- Attributes
+[
+ (kDefault)
+ (kIndex)
+ (kNodefault)
+ (kStored)
+ (kStatic)
+ (kVirtual)
+ (kAbstract)
+ (kSealed)
+ (kDynamic)
+ (kOverride)
+ (kOverload)
+ (kReintroduce)
+ (kInline)
+ (kForward)
+ (kStdcall)
+ (kCdecl)
+ (kCppdecl)
+ (kPascal)
+ (kRegister)
+ (kMwpascal)
+ (kExternal)
+ (kName)
+ (kMessage)
+ (kDeprecated)
+ (kExperimental)
+ (kPlatform)
+ (kUnimplemented)
+ (kCvar)
+ (kExport)
+ (kFar)
+ (kNear)
+ (kSafecall)
+ (kAssembler)
+ (kNostackframe)
+ (kInterrupt)
+ (kNoreturn)
+ (kIocheck)
+ (kLocal)
+ (kHardfloat)
+ (kSoftfloat)
+ (kMs_abi_default)
+ (kMs_abi_cdecl)
+ (kSaveregisters)
+ (kSysv_abi_default)
+ (kSysv_abi_cdecl)
+ (kVectorcall)
+ (kVarargs)
+ (kWinapi)
+ (kAlias)
+ (kDelayed)
+ (rttiAttributes)
+ (procAttribute)
+] @attribute
+
+(procAttribute
+ (kPublic) @attribute)
+
+; -- Punctuation & operators
+[
+ "("
+ ")"
+ "["
+ "]"
+] @punctuation.bracket
+
+[
+ ";"
+ ","
+ ":"
+ (kEndDot)
+] @punctuation.delimiter
+
+".." @punctuation.special
+
+[
+ (kDot)
+ (kAdd)
+ (kSub)
+ (kMul)
+ (kFdiv)
+ (kAssign)
+ (kAssignAdd)
+ (kAssignSub)
+ (kAssignMul)
+ (kAssignDiv)
+ (kEq)
+ (kLt)
+ (kLte)
+ (kGt)
+ (kGte)
+ (kNeq)
+ (kAt)
+ (kHat)
+] @operator
+
+[
+ (kOr)
+ (kXor)
+ (kDiv)
+ (kMod)
+ (kAnd)
+ (kShl)
+ (kShr)
+ (kNot)
+ (kIs)
+ (kAs)
+ (kIn)
+] @keyword.operator
+
+; -- Builtin constants
+[
+ (kTrue)
+ (kFalse)
+] @boolean
+
+(kNil) @constant.builtin
+
+; -- Literals
+(literalNumber) @number
+
+(literalString) @string
+
+; -- Variables
+(exprBinary
+ (identifier) @variable)
+
+(exprUnary
+ (identifier) @variable)
+
+(assignment
+ (identifier) @variable)
+
+(exprBrackets
+ (identifier) @variable)
+
+(exprParens
+ (identifier) @variable)
+
+(exprDot
+ (identifier) @variable)
+
+(exprTpl
+ (identifier) @variable)
+
+(exprArgs
+ (identifier) @variable)
+
+(defaultValue
+ (identifier) @variable)
+
+; -- Comments
+(comment) @comment @spell
+
+((comment) @comment.documentation
+ (#lua-match? @comment.documentation "^///[^/]"))
+
+((comment) @comment.documentation
+ (#lua-match? @comment.documentation "^///$"))
+
+((comment) @comment.documentation
+ .
+ [
+ (unit)
+ (declProc)
+ ])
+
+(declTypes
+ (comment) @comment.documentation
+ .
+ (declType))
+
+(declSection
+ (comment) @comment.documentation
+ .
+ [
+ (declField)
+ (declProc)
+ ])
+
+(declEnum
+ (comment) @comment.documentation
+ .
+ (declEnumValue))
+
+(declConsts
+ (comment) @comment.documentation
+ .
+ (declConst))
+
+(declVars
+ (comment) @comment.documentation
+ .
+ (declVar))
+
+(pp) @keyword.directive
+
+; -- Type declaration
+(declType
+ name: (identifier) @type)
+
+(declType
+ name: (genericTpl
+ entity: (identifier) @type))
+
+; -- Procedure & function declarations
+; foobar
+(declProc
+ name: (identifier) @function)
+
+; foobar<t>
+(declProc
+ name: (genericTpl
+ entity: (identifier) @function))
+
+; foo.bar
+(declProc
+ name: (genericDot
+ rhs: (identifier) @function))
+
+; foo.bar<t>
+(declProc
+ name: (genericDot
+ rhs: (genericTpl
+ entity: (identifier) @function)))
+
+; Treat property declarations like functions
+(declProp
+ name: (identifier) @function)
+
+(declProp
+ getter: (identifier) @variable.member)
+
+(declProp
+ setter: (identifier) @variable.member)
+
+; -- Function parameters
+(declArg
+ name: (identifier) @variable.parameter)
+
+; -- Template parameters
+(genericArg
+ name: (identifier) @variable.parameter)
+
+(genericArg
+ type: (typeref) @type)
+
+(declProc
+ name: (genericDot
+ lhs: (identifier) @type))
+
+(declType
+ (genericDot
+ (identifier) @type))
+
+(genericDot
+ (genericTpl
+ (identifier) @type))
+
+(genericDot
+ (genericDot
+ (identifier) @type))
+
+(genericTpl
+ entity: (identifier) @type)
+
+(genericTpl
+ entity: (genericDot
+ (identifier) @type))
+
+; -- Exception parameters
+(exceptionHandler
+ variable: (identifier) @variable.parameter)
+
+; -- Type usage
+(typeref) @type
+
+; -- Constant usage
+[
+ (caseLabel)
+ (label)
+] @constant
+
+(procAttribute
+ (identifier) @constant)
+
+(procExternal
+ (identifier) @constant)
+
+; -- Variable & constant declarations
+; (This is only questionable because we cannot detect types of identifiers
+; declared in other units, so the results will be inconsistent)
+(declVar
+ name: (identifier) @variable)
+
+(declConst
+ name: (identifier) @constant)
+
+(declEnumValue
+ name: (identifier) @constant)
+
+; -- Fields
+(exprDot
+ rhs: (identifier) @variable.member)
+
+(exprDot
+ rhs: (exprDot) @variable.member)
+
+(declClass
+ (declField
+ name: (identifier) @variable.member))
+
+(declSection
+ (declField
+ name: (identifier) @variable.member))
+
+(declSection
+ (declVars
+ (declVar
+ name: (identifier) @variable.member)))
+
+(recInitializerField
+ name: (identifier) @variable.member)
+
+; ---------------------------------------------- ;;;
+; EVERYTHING BELOW THIS IS OF QUESTIONABLE VALUE ;;;
+; ---------------------------------------------- ;;;
+; -- Procedure name in calls with parentheses
+; (Pascal doesn't require parentheses for procedure calls, so this will not
+; detect all calls)
+; foobar
+(exprCall
+ entity: (identifier) @function)
+
+; foobar<t>
+(exprCall
+ entity: (exprTpl
+ entity: (identifier) @function))
+
+; foo.bar
+(exprCall
+ entity: (exprDot
+ rhs: (identifier) @function))
+
+; foo.bar<t>
+(exprCall
+ entity: (exprDot
+ rhs: (exprTpl
+ entity: (identifier) @function)))
+
+(inherited) @function
+
+; -- Heuristic for procedure/function calls without parentheses
+; (If a statement consists only of an identifier, assume it's a procedure)
+; (This will still not match all procedure calls, and also may produce false
+; positives in rare cases, but only for nonsensical code)
+(statement
+ (identifier) @function)
+
+(statement
+ (exprDot
+ rhs: (identifier) @function))
+
+(statement
+ (exprTpl
+ entity: (identifier) @function))
+
+(statement
+ (exprDot
+ rhs: (exprTpl
+ entity: (identifier) @function)))
+
+; -- Break, Continue & Exit
+; (Not ideal: ideally, there would be a way to check if these special
+; identifiers are shadowed by a local variable)
+(statement
+ ((identifier) @keyword.return
+ (#lua-match? @keyword.return "^[eE][xX][iI][tT]$")))
+
+(statement
+ (exprCall
+ entity: ((identifier) @keyword.return
+ (#lua-match? @keyword.return "^[eE][xX][iI][tT]$"))))
+
+(statement
+ ((identifier) @keyword.repeat
+ (#lua-match? @keyword.repeat "^[bB][rR][eE][aA][kK]$")))
+
+(statement
+ ((identifier) @keyword.repeat
+ (#lua-match? @keyword.repeat "^[cC][oO][nN][tT][iI][nN][uU][eE]$")))
+
+; -- Identifier type inference
+; VERY QUESTIONABLE: Highlighting of identifiers based on spelling
+(exprBinary
+ ((identifier) @constant
+ (#match? @constant "^[A-Z][A-Z0-9_]+$|^[a-z]{2,3}[A-Z].+$")))
+
+(exprUnary
+ ((identifier) @constant
+ (#match? @constant "^[A-Z][A-Z0-9_]+$|^[a-z]{2,3}[A-Z].+$")))
+
+(assignment
+ rhs: ((identifier) @constant
+ (#match? @constant "^[A-Z][A-Z0-9_]+$|^[a-z]{2,3}[A-Z].+$")))
+
+(exprBrackets
+ ((identifier) @constant
+ (#match? @constant "^[A-Z][A-Z0-9_]+$|^[a-z]{2,3}[A-Z].+$")))
+
+(exprParens
+ ((identifier) @constant
+ (#match? @constant "^[A-Z][A-Z0-9_]+$|^[a-z]{2,3}[A-Z].+$")))
+
+(exprDot
+ rhs: ((identifier) @constant
+ (#match? @constant "^[A-Z][A-Z0-9_]+$|^[a-z]{2,3}[A-Z].+$")))
+
+(exprTpl
+ args: ((identifier) @constant
+ (#match? @constant "^[A-Z][A-Z0-9_]+$|^[a-z]{2,3}[A-Z].+$")))
+
+(exprArgs
+ ((identifier) @constant
+ (#match? @constant "^[A-Z][A-Z0-9_]+$|^[a-z]{2,3}[A-Z].+$")))
+
+(declEnumValue
+ ((identifier) @constant
+ (#match? @constant "^[A-Z][A-Z0-9_]+$|^[a-z]{2,3}[A-Z].+$")))
+
+(defaultValue
+ ((identifier) @constant
+ (#match? @constant "^[A-Z][A-Z0-9_]+$|^[a-z]{2,3}[A-Z].+$")))
diff --git a/runtime/queries/pascal/indents.scm b/runtime/queries/pascal/indents.scm
new file mode 100644
index 000000000..879e7b86f
--- /dev/null
+++ b/runtime/queries/pascal/indents.scm
@@ -0,0 +1,33 @@
+[
+ (statement)
+ (declVars)
+ (declConsts)
+ (declTypes)
+ (declProc)
+ (declArgs)
+ (declUses)
+ (declClass)
+ (exprArgs)
+ (exprSubscript)
+ (exprBrackets)
+ (exprParens)
+ (recInitializer)
+ (arrInitializer)
+ (defaultValue)
+] @indent.begin
+
+(defProc
+ (block) @indent.begin)
+
+[
+ (kEnd)
+ (kFinally)
+ (kDo)
+ (kUntil)
+ (kExcept)
+ (kElse)
+ (kThen)
+ (declSection)
+ "]"
+ ")"
+] @indent.branch
diff --git a/runtime/queries/pascal/injections.scm b/runtime/queries/pascal/injections.scm
new file mode 100644
index 000000000..1f6e475c8
--- /dev/null
+++ b/runtime/queries/pascal/injections.scm
@@ -0,0 +1,5 @@
+((comment) @injection.content
+ (#set! injection.language "comment"))
+
+((asmBody) @injection.content
+ (#set! injection.language "asm"))
diff --git a/runtime/queries/pascal/locals.scm b/runtime/queries/pascal/locals.scm
new file mode 100644
index 000000000..d74d54ad4
--- /dev/null
+++ b/runtime/queries/pascal/locals.scm
@@ -0,0 +1,54 @@
+(root) @local.scope
+
+(defProc) @local.scope
+
+(lambda) @local.scope
+
+(interface
+ (declProc) @local.scope)
+
+(declSection
+ (declProc) @local.scope)
+
+(declClass
+ (declProc) @local.scope)
+
+(declHelper
+ (declProc) @local.scope)
+
+(declProcRef) @local.scope
+
+(exceptionHandler) @local.scope
+
+(exceptionHandler
+ variable: (identifier) @local.definition)
+
+(declArg
+ name: (identifier) @local.definition)
+
+(declVar
+ name: (identifier) @local.definition)
+
+(declConst
+ name: (identifier) @local.definition)
+
+(declLabel
+ name: (identifier) @local.definition)
+
+(genericArg
+ name: (identifier) @local.definition)
+
+(declEnumValue
+ name: (identifier) @local.definition)
+
+(declType
+ name: (identifier) @local.definition)
+
+(declType
+ name: (genericTpl
+ entity: (identifier) @local.definition))
+
+(declProc
+ name: (identifier) @local.definition)
+
+(identifier) @local.reference