joelday / papyrus-lang

📜Advanced language tools for the Papyrus scripting language.
Other
111 stars 19 forks source link

Step-through attribute for debugging #65

Open joelday opened 5 years ago

joelday commented 5 years ago

-@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

joelday commented 5 years ago

We can do this within any comment format and can just rely on @AttributeName.

Scrivener07 commented 5 years ago

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

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
Scrivener07 commented 5 years ago

Added details to my previous comment.