Roland Soós
Roland Soós

Reputation: 3280

How to PHPDoc inline JavaScript string parameter to allow syntax highlight in PhpStorm

WordPress has a PHP function which allows to inject inline JavaScript to the page: https://developer.wordpress.org/reference/functions/wp_add_inline_script/

Is there a way to mark the $data parameter to tell the IDE that it is a string which contains JavaScript code and then syntax highlight it?

wp_add_inline_script( 'xyz', 'new xyz();' );


/**
 * Adds extra code to a registered script.
 *
 * @param string $handle   Name of the script to add the inline script to.
 * @param string $data     String containing the javascript to be added.
 * @param string $position Optional. Whether to add the inline script before the handle
 *                         or after. Default 'after'.
 * @return bool True on success, false on failure.
 */
function wp_add_inline_script( $handle, $data, $position = 'after' ) {
    _wp_scripts_maybe_doing_it_wrong( __FUNCTION__ );

    if ( false !== stripos( $data, '</script>' ) ) {
        _doing_it_wrong( __FUNCTION__, sprintf(
            /* translators: 1: <script>, 2: wp_add_inline_script() */
            __( 'Do not pass %1$s tags to %2$s.' ),
            '<code>&lt;script&gt;</code>',
            '<code>wp_add_inline_script()</code>'
        ), '4.5.0' );
        $data = trim( preg_replace( '#<script[^>]*>(.*)</script>#is', '$1', $data ) );
    }

    return wp_scripts()->add_inline_script( $handle, $data, $position );
}

Upvotes: 1

Views: 504

Answers (1)

Jeto
Jeto

Reputation: 14927

Refer to the Using Language Injections documentation page.

Basically, there are three ways to do this:

  1. Put your cursor anyone within your string containing JS, hit Alt+Enter (or click the lightbulb), select Inject language or reference then pick JS.
  2. Define a variable and add // language=JavaScript on top of it, then pass it to the method:

    // language=JavaScript
    $data = 'document.getElementbyId("selector")';
    
    wp_add_inline_script('handle', $data, 'position');
    
  3. Probably the most appropriate solution in your case, use /* language=JavaScript */ before passing your argument:

    wp_add_inline_script('handle', /* language=JavaScript */ 'document.getElementbyId("selector")', 'position');
    

Upvotes: 1

Related Questions