### Summary

I might have found a bug, possibly in the debug module, possibly elsewhere.
This is a trivial playbook to reproduce the error:-

    - name: is this a bug?
      gather_facts: no
      hosts: localhost
      tasks:
      - ansible.builtin.debug:
          msg "this should be a syntax error"
      - ansible.builtin.debug:
          msg: "{{ inventory_hostname }} this should work"

When run this is the output (**Exactly as expected**)

    ERROR! this task 'ansible.builtin.debug' has extra params, which is only allowed in the following modules: ansible.builtin.raw, ansible.legacy.raw, ansible.builtin.import_role, set_fact, ansible.legacy.add_host, ansible.legacy.script, ansible.legacy.import_tasks, import_role, ansible.builtin.meta, win_shell, ansible.builtin.add_host, ansible.builtin.command, meta, ansible.windows.win_command, ansible.legacy.include_role, shell, import_tasks, add_host, ansible.legacy.win_shell, ansible.builtin.include_role, ansible.legacy.group_by, win_command, include_role, ansible.legacy.include_vars, ansible.legacy.include_tasks, raw, include_vars, group_by, ansible.builtin.set_fact, ansible.legacy.command, command, ansible.builtin.win_command, script, ansible.legacy.set_fact, ansible.legacy.win_command, ansible.legacy.meta, ansible.legacy.import_role, ansible.builtin.import_tasks, ansible.builtin.shell, include_tasks, ansible.builtin.include_vars, ansible.builtin.script, include, ansible.windows.win_shell, ansible.builtin.group_by, ansible.builtin.include_tasks, ansible.builtin.include, ansible.legacy.shell, ansible.legacy.include, ansible.builtin.win_shell

    The error appears to be in '/home/user/t.yml': line 5, column 5, but may
    be elsewhere in the file depending on the exact syntax problem.

    The offending line appears to be:

      tasks:
      - ansible.builtin.debug:
        ^ here



Note that the first call to debug has a badly formed msg line. (There is no ``` : ``` after ``` msg``` ) and so this syntax error is what I would expect.

This isn't the interesting part though. The interesting part is that if I add a jinja variable to the message (any defined variable will do) , Like this:-

    - name: is this a bug?
      gather_facts: no
      hosts: localhost
      tasks:
      - ansible.builtin.debug:
          msg "this should be also be a syntax error {{ inventory_hostname }}"
      - ansible.builtin.debug:
          msg: "{{ inventory_hostname }} this should work"


the code runs and gives this output:-

    PLAY [is this a bug?] **********************************************************

    TASK [ansible.builtin.debug] ***************************************************
    ok: [localhost] => {}

    MSG:

    Hello world!

    TASK [ansible.builtin.debug] ***************************************************
    ok: [localhost] => {}

    MSG:

    localhost this should work

    PLAY RECAP *********************************************************************
    localhost                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0


i.e   the debug module does it's default behaviour and prints ``` Hello world! ``` instead of raising a syntax error. No mention of the malformed ``` msg ``` line is made at all.

I'm sure that is wrong, but I don't know how to check if it is an existing issue or a new one.

### Issue Type

Bug Report

### Component Name

ansible.builtin.debug

### Ansible Version

```console
$ ansible --version

ansible [core 2.13.3]
  config file = /home/adam/.ansible.cfg
  configured module search path = ['/home/adam/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /home/adam/.local/lib/python3.10/site-packages/ansible
  ansible collection location = /home/adam/.ansible/collections:/usr/share/ansible/collections
  executable location = /home/adam/.local/bin/ansible
  python version = 3.10.6 (main, Nov 14 2022, 16:10:14) [GCC 11.3.0]
  jinja version = 3.0.3
  libyaml = True


And also:-

$ ansible --version
ansible 2.9.21
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/adam/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.8/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.8.10 (default, May  4 2021, 00:00:00) [GCC 10.2.1 20201125 (Red Hat 10.2.1-9)]
```


### Configuration

```console
# if using a version older than ansible-core 2.12 you should omit the '-t all'
$ ansible-config dump --only-changed -t all

# I tested on a clean install, no output is generated.


# I also tested on an ansible 2.9.21 system and got this:-

$ ansible-config dump --only-changed
DEFAULT_STDOUT_CALLBACK(env: ANSIBLE_STDOUT_CALLBACK) = debug
GALAXY_SERVER_LIST(/etc/ansible/ansible.cfg) = ['automation_hub']
```


### OS / Environment

Core 2.13.3 was tested on Ubuntu 22.04.1 LTS 
ansible 2.9.21 was tested on Fedora 32

I was able to reproduce this behaviour on several other Linux distros and versions. 

### Steps to Reproduce

<!--- Paste example playbooks or commands between quotes below -->
```yaml (paste below)
    - name: is this a bug?
      gather_facts: no
      hosts: localhost
      tasks:
      - ansible.builtin.debug:
          msg "this should be also be a syntax error {{ inventory_hostname }}"
      - ansible.builtin.debug:
          msg: "{{ inventory_hostname }} this should work"

```


### Expected Results

As per the description I expected a syntax error as follows:-

`    ERROR! this task 'ansible.builtin.debug' has extra params, which is only allowed in the following modules: ansible.builtin.raw, ansible.legacy.raw, ansible.builtin.import_role, set_fact, ansible.legacy.add_host, ansible.legacy.script, ansible.legacy.import_tasks, import_role, ansible.builtin.meta, win_shell, ansible.builtin.add_host, ansible.builtin.command, meta, ansible.windows.win_command, ansible.legacy.include_role, shell, import_tasks, add_host, ansible.legacy.win_shell, ansible.builtin.include_role, ansible.legacy.group_by, win_command, include_role, ansible.legacy.include_vars, ansible.legacy.include_tasks, raw, include_vars, group_by, ansible.builtin.set_fact, ansible.legacy.command, command, ansible.builtin.win_command, script, ansible.legacy.set_fact, ansible.legacy.win_command, ansible.legacy.meta, ansible.legacy.import_role, ansible.builtin.import_tasks, ansible.builtin.shell, include_tasks, ansible.builtin.include_vars, ansible.builtin.script, include, ansible.windows.win_shell, ansible.builtin.group_by, ansible.builtin.include_tasks, ansible.builtin.include, ansible.legacy.shell, ansible.legacy.include, ansible.builtin.win_shell
`


### Actual Results

```console
$ ansible-playbook t.yml -i localhost,

PLAY [is this a bug?] ****************************************************************************************************************************************************************************

TASK [ansible.builtin.debug] *********************************************************************************************************************************************************************
ok: [localhost] => {
    "msg": "Hello world!"
}

TASK [ansible.builtin.debug] *********************************************************************************************************************************************************************
ok: [localhost] => {
    "msg": "localhost this should work"
}

PLAY RECAP ***************************************************************************************************************************************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
```


### Code of Conduct

- [X] I agree to follow the Ansible Code of Conduct
'''
        Runs the task with the loop items specified and collates the result
        into an array named 'results' which is inserted into the final result
        along with the item for which the loop ran.
        '''
        task_vars = self._job_vars
        templar = Templar(loader=self._loader, variables=task_vars)
        self._task.loop_control.post_validate(templar=templar)
        loop_var = self._task.loop_control.loop_var
        index_var = self._task.loop_control.index_var
        loop_pause = self._task.loop_control.pause
        extended = self._task.loop_control.extended
        extended_allitems = self._task.loop_control.extended_allitems
        
        label = self._task.loop_control.label or '{{' + loop_var + '}}'
        if loop_var in task_vars:
            display.warning(u"%s: The loop variable '%s' is already in use. "
                            u"You should set the `loop_var` value in the `loop_control` option for the task"
                            u" to something else to avoid variable collisions and unexpected behavior." % (self._task, loop_var))
        ran_once = False
        no_log = False
        items_len = len(items)
        results = []
        for item_index, item in enumerate(items):
            task_vars['ansible_loop_var'] = loop_var
            task_vars[loop_var] = item
            if index_var:
                task_vars['ansible_index_var'] = index_var
                task_vars[index_var] = item_index
            if extended: