# ReflectedFunction

> Information about a shader function.

## Definition

* **Type:** Struct
* **Namespace:** [UnityEditor.ShaderApiReflection](/engine/6000.5/script-reference/unityeditor/shaderapireflection.md)
* **Assembly:** UnityEditor.CoreModule

```csharp
public struct ReflectedFunction
```

## Remarks

This struct represents a function as reflected from shader source code. On top of information extracted directly from the syntax, such as [ReflectedFunction.ReturnTypeName](/engine/6000.5/script-reference/unityeditor/shaderapireflection/reflectedfunction/returntypename.md), [ReflectedFunction.Parameters](/engine/6000.5/script-reference/unityeditor/shaderapireflection/reflectedfunction/parameters.md), and [ReflectedFunction.Name](/engine/6000.5/script-reference/unityeditor/shaderapireflection/reflectedfunction/name.md), it also contains [ReflectedFunction.Hints](/engine/6000.5/script-reference/unityeditor/shaderapireflection/reflectedfunction/hints.md): metadata extracted from structured comments decorating the function.

Additional Resources: [ShaderIncludeReflection.ReflectedFunctions](/engine/6000.5/script-reference/unityeditor/shaderapireflection/shaderincludereflection/reflectedfunctions.md).

## Examples

```csharp
using UnityEditor;
using UnityEditor.ShaderApiReflection;
using UnityEngine;

// This example adds a menu item which prints information from reflected functions in any shader include
// assets selected in the project view.
public class ReflectedFunctionPrinter
{
    [MenuItem("Examples/ReflectedFunctionPrinter")]
    static void PrintReflectedFunctions()
    {
        // Visit each selected object
        foreach (Object selectedObject in Selection.objects)
        {
            // Check if the object is a ShaderInclude
            if (selectedObject is ShaderInclude includeObject)
            {
                Debug.Log("Found shader include at " + AssetDatabase.GetAssetPath(includeObject));

                // Visit each exposed function in the include
                foreach (ReflectedFunction func in includeObject.Reflection.ReflectedFunctions)
                    PrintFunction(func);
            }
        }
    }

    static void PrintFunction(ReflectedFunction func)
    {
        // Print the function's signature
        Debug.Log($"Found function with signature: {func.GetSignature()}");

        // Print the function's summary, if it exists
        if (func.Hints.TryGetValue("summary", out string funcSummary))
            Debug.Log($"{func.Name}'s doc comment: {funcSummary}");

        // Print the function's body text
        Debug.Log($"{func.Name}'s body:\n{func.GetNormalizedBodyText()}");

        // Visit each parameter
        foreach (ReflectedParameter param in func.Parameters)
        {
            // Print the parameter
            Debug.Log($"{func.Name} has parameter: {param.ToString()}");

            // Print the parameter's summary
            if (param.Hints.TryGetValue("summary", out string paramSummary))
                Debug.Log($"{param.Name}'s doc comment: {paramSummary}");
        }
    }
}
```

## Properties

| Property                                                                                                                      | Description                                                                              |
| ----------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
| [BodyText](/engine/6000.5/script-reference/unityeditor/shaderapireflection/reflectedfunction/bodytext.md)                     | The function's unprocessed body text.                                                    |
| [EnclosingNamespace](/engine/6000.5/script-reference/unityeditor/shaderapireflection/reflectedfunction/enclosingnamespace.md) | The namespace in which the function was defined.                                         |
| [FullyQualifiedName](/engine/6000.5/script-reference/unityeditor/shaderapireflection/reflectedfunction/fullyqualifiedname.md) | The function's fully qualified name, taking into account the enclosing namespace.        |
| [Hints](/engine/6000.5/script-reference/unityeditor/shaderapireflection/reflectedfunction/hints.md)                           | The function's metadata, extracted from any structured comments decorating the function. |
| [Name](/engine/6000.5/script-reference/unityeditor/shaderapireflection/reflectedfunction/name.md)                             | The function's name.                                                                     |
| [Parameters](/engine/6000.5/script-reference/unityeditor/shaderapireflection/reflectedfunction/parameters.md)                 | The function's parameters.                                                               |
| [ReturnTypeName](/engine/6000.5/script-reference/unityeditor/shaderapireflection/reflectedfunction/returntypename.md)         | The name of the function's return type.                                                  |

## Methods

| Method                                                                                                                              | Description                                              |
| ----------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------- |
| [GetNormalizedBodyText](/engine/6000.5/script-reference/unityeditor/shaderapireflection/reflectedfunction/getnormalizedbodytext.md) | Gets the function's body text in an easy-to-read format. |
| [GetSignature](/engine/6000.5/script-reference/unityeditor/shaderapireflection/reflectedfunction/getsignature.md)                   | Gets the function's signature.                           |
| [ToString](/engine/6000.5/script-reference/unityeditor/shaderapireflection/reflectedfunction/tostring.md)                           | Gets the function's signature.                           |
