Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 40 additions & 0 deletions lexers/testdata/ansible.actual
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
---
- name: Install and configure web servers
hosts: webservers
become: true
vars:
package_name: nginx
listen_port: 8080
admin_user: "{{ ansible_user | default('root') }}"
tasks:
- name: Ensure {{ package_name }} is installed
ansible.builtin.package:
name: "{{ package_name }}"
state: present

{# render only when SSL is enabled #}
{% if enable_ssl %}
- name: Deploy TLS certificate
ansible.builtin.copy:
src: "files/{{ inventory_hostname }}.pem"
dest: /etc/ssl/certs/{{ inventory_hostname }}.pem
mode: "0644"
{% endif %}

- name: Render configuration
ansible.builtin.template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
notify:
- Restart nginx

- name: Print greeting
ansible.builtin.debug:
msg: "Hello {{ admin_user }}, listening on port {{ listen_port }}"

handlers:
- name: Restart nginx
ansible.builtin.service:
name: "{{ package_name }}"
state: restarted
...
218 changes: 218 additions & 0 deletions lexers/testdata/ansible.expected
Original file line number Diff line number Diff line change
@@ -0,0 +1,218 @@
[
{"type":"NameNamespace","value":"---"},
{"type":"TextWhitespace","value":"\n"},
{"type":"Text","value":"- "},
{"type":"NameTag","value":"name"},
{"type":"Punctuation","value":":"},
{"type":"TextWhitespace","value":" "},
{"type":"Literal","value":"Install and configure web servers"},
{"type":"TextWhitespace","value":"\n "},
{"type":"NameTag","value":"hosts"},
{"type":"Punctuation","value":":"},
{"type":"TextWhitespace","value":" "},
{"type":"Literal","value":"webservers"},
{"type":"TextWhitespace","value":"\n "},
{"type":"NameTag","value":"become"},
{"type":"Punctuation","value":":"},
{"type":"TextWhitespace","value":" "},
{"type":"KeywordConstant","value":"true"},
{"type":"TextWhitespace","value":"\n "},
{"type":"NameTag","value":"vars"},
{"type":"Punctuation","value":":"},
{"type":"TextWhitespace","value":"\n "},
{"type":"NameTag","value":"package_name"},
{"type":"Punctuation","value":":"},
{"type":"TextWhitespace","value":" "},
{"type":"Literal","value":"nginx"},
{"type":"TextWhitespace","value":"\n "},
{"type":"NameTag","value":"listen_port"},
{"type":"Punctuation","value":":"},
{"type":"TextWhitespace","value":" "},
{"type":"LiteralNumber","value":"8080"},
{"type":"TextWhitespace","value":"\n "},
{"type":"NameTag","value":"admin_user"},
{"type":"Punctuation","value":":"},
{"type":"TextWhitespace","value":" "},
{"type":"LiteralStringDouble","value":"\""},
{"type":"CommentPreproc","value":"{{"},
{"type":"Text","value":" "},
{"type":"NameVariable","value":"ansible_user"},
{"type":"Text","value":" "},
{"type":"Operator","value":"|"},
{"type":"Text","value":" "},
{"type":"NameFunction","value":"default"},
{"type":"Operator","value":"("},
{"type":"LiteralStringSingle","value":"'root'"},
{"type":"Operator","value":")"},
{"type":"Text","value":" "},
{"type":"CommentPreproc","value":"}}"},
{"type":"LiteralStringDouble","value":"\""},
{"type":"TextWhitespace","value":"\n "},
{"type":"NameTag","value":"tasks"},
{"type":"Punctuation","value":":"},
{"type":"TextWhitespace","value":"\n "},
{"type":"Text","value":"- "},
{"type":"NameTag","value":"name"},
{"type":"Punctuation","value":":"},
{"type":"TextWhitespace","value":" "},
{"type":"Literal","value":"Ensure "},
{"type":"CommentPreproc","value":"{{"},
{"type":"Text","value":" "},
{"type":"NameVariable","value":"package_name"},
{"type":"Text","value":" "},
{"type":"CommentPreproc","value":"}}"},
{"type":"Literal","value":" is installed"},
{"type":"TextWhitespace","value":"\n "},
{"type":"NameTag","value":"ansible.builtin.package"},
{"type":"Punctuation","value":":"},
{"type":"TextWhitespace","value":"\n "},
{"type":"NameTag","value":"name"},
{"type":"Punctuation","value":":"},
{"type":"TextWhitespace","value":" "},
{"type":"LiteralStringDouble","value":"\""},
{"type":"CommentPreproc","value":"{{"},
{"type":"Text","value":" "},
{"type":"NameVariable","value":"package_name"},
{"type":"Text","value":" "},
{"type":"CommentPreproc","value":"}}"},
{"type":"LiteralStringDouble","value":"\""},
{"type":"TextWhitespace","value":"\n "},
{"type":"NameTag","value":"state"},
{"type":"Punctuation","value":":"},
{"type":"TextWhitespace","value":" "},
{"type":"Literal","value":"present"},
{"type":"TextWhitespace","value":"\n\n "},
{"type":"Comment","value":"{# render only when SSL is enabled #}"},
{"type":"TextWhitespace","value":"\n "},
{"type":"CommentPreproc","value":"{%"},
{"type":"Text","value":" "},
{"type":"Keyword","value":"if"},
{"type":"Text","value":" "},
{"type":"NameVariable","value":"enable_ssl"},
{"type":"Text","value":" "},
{"type":"CommentPreproc","value":"%}"},
{"type":"TextWhitespace","value":"\n "},
{"type":"Text","value":"- "},
{"type":"NameTag","value":"name"},
{"type":"Punctuation","value":":"},
{"type":"TextWhitespace","value":" "},
{"type":"Literal","value":"Deploy TLS certificate"},
{"type":"TextWhitespace","value":"\n "},
{"type":"NameTag","value":"ansible.builtin.copy"},
{"type":"Punctuation","value":":"},
{"type":"TextWhitespace","value":"\n "},
{"type":"NameTag","value":"src"},
{"type":"Punctuation","value":":"},
{"type":"TextWhitespace","value":" "},
{"type":"LiteralStringDouble","value":"\"files/"},
{"type":"CommentPreproc","value":"{{"},
{"type":"Text","value":" "},
{"type":"NameVariable","value":"inventory_hostname"},
{"type":"Text","value":" "},
{"type":"CommentPreproc","value":"}}"},
{"type":"LiteralStringDouble","value":".pem\""},
{"type":"TextWhitespace","value":"\n "},
{"type":"NameTag","value":"dest"},
{"type":"Punctuation","value":":"},
{"type":"TextWhitespace","value":" "},
{"type":"Literal","value":"/etc/ssl/certs/"},
{"type":"CommentPreproc","value":"{{"},
{"type":"Text","value":" "},
{"type":"NameVariable","value":"inventory_hostname"},
{"type":"Text","value":" "},
{"type":"CommentPreproc","value":"}}"},
{"type":"Literal","value":".pem"},
{"type":"TextWhitespace","value":"\n "},
{"type":"NameTag","value":"mode"},
{"type":"Punctuation","value":":"},
{"type":"TextWhitespace","value":" "},
{"type":"LiteralStringDouble","value":"\"0644\""},
{"type":"TextWhitespace","value":"\n "},
{"type":"CommentPreproc","value":"{%"},
{"type":"Text","value":" "},
{"type":"Keyword","value":"endif"},
{"type":"Text","value":" "},
{"type":"CommentPreproc","value":"%}"},
{"type":"TextWhitespace","value":"\n\n "},
{"type":"Text","value":"- "},
{"type":"NameTag","value":"name"},
{"type":"Punctuation","value":":"},
{"type":"TextWhitespace","value":" "},
{"type":"Literal","value":"Render configuration"},
{"type":"TextWhitespace","value":"\n "},
{"type":"NameTag","value":"ansible.builtin.template"},
{"type":"Punctuation","value":":"},
{"type":"TextWhitespace","value":"\n "},
{"type":"NameTag","value":"src"},
{"type":"Punctuation","value":":"},
{"type":"TextWhitespace","value":" "},
{"type":"Literal","value":"nginx.conf.j2"},
{"type":"TextWhitespace","value":"\n "},
{"type":"NameTag","value":"dest"},
{"type":"Punctuation","value":":"},
{"type":"TextWhitespace","value":" "},
{"type":"Literal","value":"/etc/nginx/nginx.conf"},
{"type":"TextWhitespace","value":"\n "},
{"type":"NameTag","value":"notify"},
{"type":"Punctuation","value":":"},
{"type":"TextWhitespace","value":"\n "},
{"type":"Text","value":"- "},
{"type":"Literal","value":"Restart nginx"},
{"type":"TextWhitespace","value":"\n\n "},
{"type":"Text","value":"- "},
{"type":"NameTag","value":"name"},
{"type":"Punctuation","value":":"},
{"type":"TextWhitespace","value":" "},
{"type":"Literal","value":"Print greeting"},
{"type":"TextWhitespace","value":"\n "},
{"type":"NameTag","value":"ansible.builtin.debug"},
{"type":"Punctuation","value":":"},
{"type":"TextWhitespace","value":"\n "},
{"type":"NameTag","value":"msg"},
{"type":"Punctuation","value":":"},
{"type":"TextWhitespace","value":" "},
{"type":"LiteralStringDouble","value":"\"Hello "},
{"type":"CommentPreproc","value":"{{"},
{"type":"Text","value":" "},
{"type":"NameVariable","value":"admin_user"},
{"type":"Text","value":" "},
{"type":"CommentPreproc","value":"}}"},
{"type":"LiteralStringDouble","value":", listening on port "},
{"type":"CommentPreproc","value":"{{"},
{"type":"Text","value":" "},
{"type":"NameVariable","value":"listen_port"},
{"type":"Text","value":" "},
{"type":"CommentPreproc","value":"}}"},
{"type":"LiteralStringDouble","value":"\""},
{"type":"TextWhitespace","value":"\n\n "},
{"type":"NameTag","value":"handlers"},
{"type":"Punctuation","value":":"},
{"type":"TextWhitespace","value":"\n "},
{"type":"Text","value":"- "},
{"type":"NameTag","value":"name"},
{"type":"Punctuation","value":":"},
{"type":"TextWhitespace","value":" "},
{"type":"Literal","value":"Restart nginx"},
{"type":"TextWhitespace","value":"\n "},
{"type":"NameTag","value":"ansible.builtin.service"},
{"type":"Punctuation","value":":"},
{"type":"TextWhitespace","value":"\n "},
{"type":"NameTag","value":"name"},
{"type":"Punctuation","value":":"},
{"type":"TextWhitespace","value":" "},
{"type":"LiteralStringDouble","value":"\""},
{"type":"CommentPreproc","value":"{{"},
{"type":"Text","value":" "},
{"type":"NameVariable","value":"package_name"},
{"type":"Text","value":" "},
{"type":"CommentPreproc","value":"}}"},
{"type":"LiteralStringDouble","value":"\""},
{"type":"TextWhitespace","value":"\n "},
{"type":"NameTag","value":"state"},
{"type":"Punctuation","value":":"},
{"type":"TextWhitespace","value":" "},
{"type":"Literal","value":"restarted"},
{"type":"TextWhitespace","value":"\n"},
{"type":"NameNamespace","value":"..."},
{"type":"TextWhitespace","value":"\n"}
]
20 changes: 20 additions & 0 deletions lexers/yaml_jinja.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package lexers

import (
. "github.com/alecthomas/chroma/v2" // nolint
)

// YAML+Jinja is YAML with Jinja templating embedded. Used by Ansible playbooks
// and Salt SLS files.
var YAMLJinja = Register(DelegatingLexer(
MustNewXMLLexer(embedded, "embedded/yaml.xml"),
MustNewXMLLexer(embedded, "embedded/django_jinja.xml").SetConfig(
&Config{
Name: "YAML+Jinja",
Aliases: []string{"yaml+jinja", "salt", "sls", "ansible"},
Filenames: []string{"*.sls"},
MimeTypes: []string{"text/x-yaml+jinja", "text/x-sls"},
DotAll: true,
},
),
))