papyrus-lang
papyrus-lang copied to clipboard
Step-through attribute for debugging
-@Scrivener07
"Something like attributes in c#. Here is an idea that might work. In papyrus do a single inline block comment directly above a member to mark as DebuggerStepThrough, maybe with some other symbol too like @. Inline block comments are extremely rare so will likely not conflict with any existing code to date."
; This is my function doc string.
;/@DebuggerStepThrough/;
var Function Foobar(var argument)
; Dont bother stepping through this function.
return none
EndFunction
or
;/@DebuggerStepThrough/; ;/@SomeOtherAttribute/;
var Function Foobar1(var argument)
; Dont bother stepping through this function and some other thing.
return none
EndFunction
;/@DebuggerStepThrough/;
;/@SomeOtherAttribute/;
var Function Foobar2(var argument)
; Dont bother stepping through this function and some other thing.
return none
EndFunction
;/@DebuggerStepThrough | @SomeOtherAttribute/;
var Function Foobar3(var argument)
; Dont bother stepping through this function and some other thing.
return none
EndFunction
See Also
- https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.debuggerstepthroughattribute
We can do this within any comment format and can just rely on @AttributeName
.
Note: This is an example of a mod that uses @something
within Papyrus source. https://github.com/schlangster/skyui/blob/master/dist/Data/Scripts/Source/SKI_ActiveEffectsWidget.psc#L126
Its a very popular dependency that provides a Papyrus API for configuration menus and hud widgets. This is just a info tidbit for later. Be sure to peek at the papyrus in that project. SkyUI and its source code is the gold standard for what a mod should be.
Examples
-
; @implements
-
; @override
-
; @interface
Fragments
Fragments are an automatically generated code-behind created by the Creation Kit. These are also some patterns to watch out for.
Examples (Skyrim)
https://github.com/schlangster/skyui/blob/master/dist/Data/Scripts/Source/SKI_QF_ConfigManagerInstance.psc
;BEGIN FRAGMENT CODE - Do not edit anything between this and the end comment
;NEXT FRAGMENT INDEX 1
Scriptname SKI_QF_ConfigManagerInstance Extends Quest Hidden
;BEGIN ALIAS PROPERTY PlayerRef
;ALIAS PROPERTY TYPE ReferenceAlias
ReferenceAlias Property Alias_PlayerRef Auto
;END ALIAS PROPERTY
;BEGIN FRAGMENT Fragment_0
Function Fragment_0()
;BEGIN AUTOCAST TYPE SKI_ConfigManager
Quest __temp = self as Quest
SKI_ConfigManager kmyQuest = __temp as SKI_ConfigManager
;END AUTOCAST
;BEGIN CODE
kmyQuest.ForceReset()
;END CODE
EndFunction
;END FRAGMENT
;END FRAGMENT CODE - Do not edit anything between this and the begin comment
Added details to my previous comment.