From 5e22f357b5172a069bbcadec8b075e0f48093bfa Mon Sep 17 00:00:00 2001 From: William Voyek Date: Fri, 15 Mar 2019 10:19:42 -0700 Subject: [PATCH] v0.7.0 ## [0.7.0] - 2019-03-15 ### Added - Updated syntax from https://nginx.org/en/docs ### Changed - Converted syntax file from XML to JSON --- .vs/ProjectSettings.json | 3 + .vs/VSWorkspaceState.json | 8 + .vs/slnx.sqlite | Bin 0 -> 77824 bytes .vs/vscode-nginx/v15/.suo | Bin 0 -> 32768 bytes .vscode/launch.json | 23 +- .vscodeignore | 5 + .vsixmanifest | 37 +++ CHANGELOG.md | 31 +++ README.md | 8 +- nginx.configuration.json | 20 +- nginx_logo.png | Bin 2302 -> 4583 bytes package.json | 52 ++-- syntaxes/nginx.tmLanguage | 278 --------------------- syntaxes/nginx.tmLanguage.json | 424 +++++++++++++++++++++++++++++++++ vsc-extension-quickstart.md | 34 +-- vscode-nginx-0.0.1.vsix | Bin 0 -> 7274 bytes 16 files changed, 581 insertions(+), 342 deletions(-) create mode 100644 .vs/ProjectSettings.json create mode 100644 .vs/VSWorkspaceState.json create mode 100644 .vs/slnx.sqlite create mode 100644 .vs/vscode-nginx/v15/.suo create mode 100644 .vscodeignore create mode 100644 .vsixmanifest create mode 100644 CHANGELOG.md delete mode 100644 syntaxes/nginx.tmLanguage create mode 100644 syntaxes/nginx.tmLanguage.json create mode 100644 vscode-nginx-0.0.1.vsix diff --git a/.vs/ProjectSettings.json b/.vs/ProjectSettings.json new file mode 100644 index 0000000..f8b4888 --- /dev/null +++ b/.vs/ProjectSettings.json @@ -0,0 +1,3 @@ +{ + "CurrentProjectSetting": null +} \ No newline at end of file diff --git a/.vs/VSWorkspaceState.json b/.vs/VSWorkspaceState.json new file mode 100644 index 0000000..68b3c28 --- /dev/null +++ b/.vs/VSWorkspaceState.json @@ -0,0 +1,8 @@ +{ + "ExpandedNodes": [ + "", + "\\syntaxes" + ], + "SelectedNode": "\\.vsixmanifest", + "PreviewInSolutionExplorer": false +} \ No newline at end of file diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..d079ff03b8235a627bc8d1d31976e52040e38969 GIT binary patch literal 77824 zcmeI5U2Gdyc7SI@ij*jeBU^EZ#tA$&*0H(v$n(SbOJKALMcHg*N)aVHu1g5>b4O+( zk+w)V7P|W&yUA|4K#T4^6h+X7MNyS{p z&mGQ?Gb1v#+)ZjHhk$y_f$GgH}uAh7S&yOzC0lHE>T9|=@hn}21g zGNj+rxpR~We=w`+Hh}F~<#J_}UshMN5_ebyan@nES7H1IEW+M| zx$}-gI-RE7+@k&HBTI@Utm}YW3=XyX`d+6?w)=RJNfZ+w^q9DsbjTTWT$L7x5&mp)srGqafeA} z52>N=I7wNsq=W4>iVxN&eYbh1;k!+;RPs6(cbjB3v>v)mGAnBMkKi`J5DwG%=VBr; zGdQ$`giadmRA|^SgAE1y<{BnEqBpPY-G)#XhMTa7(8bo8+oaRAwr@9hYT|3vs}K$$ z=uq1`Kank5EVB2feA^3~rS)ylZ(%}DvB_Xq*K5_+*85XODAO<0H?A-z=oU;8VM~VfcuwYJhYnv-Dq2H-B$GmP!XGxj zUVxd&S0Gt{8uI?^c=V1SDdOwgyCXHx3+*~ZquP?3f&hCzHcHJ=41hHpvd9_l#T=VaI!23s<#vsl{Z*r0ZM@&wSIgf)g zwNu%Gbb{SK*}Fw0-EOnB8L_5%FC`r}zaTXt*SESLYm|EwSH?1h^XJ(czNvNYz&#Jy z=#V?Rqy=|D@yk@q&=Q&FTHxOopk#6X3Y#sQIKkfE^y>^12!4#k>bMzdH<*5dlrPRS zuUT8WU~7Y5=ihj)!?I>(Y8t+ePvjZyr`%t0?@#Wxba6{U3$gk1c#?yhoE4$4tHzw6N{Stq(;opg#hR1z7 z-QC-PEWNRe=9YW6uW=zL-GWD6)46Z{=2Uu|dHKCJ>D_R3@G!OBdrH$0gO5OeCcX{w zEXg$uy(HMBk|9WNA=s|!i@T;`Yow$&f~1>fi8zL!*^=86vK+;tb%Ky;n3ksrl5Od- zrWt}R>QIE%WSO!N7m`&`(_BZ6)MUDBnpOV$bw{*90LFtE>Q)|v@Fq-bivkbJ3yclInc>5Yyvzq%g}Yz^aM{Y zX;6~^>~+HsOii^xOHGkQSLM-56c&1)bbz4v+4QetR zD5p5OAQ~2tWDij5mOz_w6&aLJfpbY$6v0v*QBYmUE!mo6$gT)NM3i*L5j0QMdk9RC z#H>IUOxrU|+jInCx-fR44mHV&CMZO=W!>;p3EH+46Nb`M1=Vx`0a&X5<0J|m(MyEL zz8MI%=#)w_j1SQBXmgfed7eLZK-}^~QG&Ls(wY!OrhSM*d>gutXqAVi3z z5FkF#$p+_(>*P7$QIZLqp^=hZav+G6R6){ISGFBb^E62yqG)R}h1svkv|*@YH4#xK zPDz0vX6xYQB}E4hgnqb|S#l(z5eo)_Xn?XLLaZUO2tr`UrUs5+XeC#bOQI!%Nf6hN zAVTSaBC1f6=179+5wLMXqr` z*n7I_7`iP2dKKK<)4&xqh?$P-xuRx(8ObulE|+K$gf<%n2m*!--XbY50J02`8+;8y zl;9bv*whI&I7>iJ*iWl#ZhwNB{{S0VIF~kN^@u0!RP}AOR$R z1ipL(PNvFql|Sm#-S~;r%j}4waOvZzi|m1;0jXzTxt}~3FgBAqI~h9!FwMc)|NM&# z_ix+}x%av6a68B%J_vX6WOIB-h*V-g=Z*n6r@Q7udF1O%L9p z($757&!i1BH(Tu;5@ya$Wtiij;#_C9oeL9>O4D(

=y^n5DA6rqsMbYrW%*`B-I+6;4F9Lq45!rVD0 z`d54Y2!(P-S-=4*0o^bu$K8VU|A!2>$o&^r;!bl%xqr-m$o+`>OYV=k-{Y3KZ*tf3 zpX5LJ3K%(d5eXmxB!C2v01`j~NB{{S0VIF~o=yV4kkZ+q4=iTrW_on_A9+Z@&7{t- z(I*r6qp7oO>~X|&kTQ4%abzNOoTU#Qrn0G779KX_Xf4qeCIR8`q%sq9(;uWpJxRzO zNxi^^j}J1_sgrE~nZY=1Ao`#neGL9gApUe9^?d450N~&wfw4?#b`rXk<2GRZ{{h1p z+<$UsxMLjrB|!cI?r*q1<^F*C9j?sX<*w#G%7659ngD8z1dsp{Kmter2_OL^fCP{L z5A3(R2YpHH7;B5QwN=h)(ZHeFXW2uq|Ho7)HhJjvKi&V&aKFuP|IX3B z`u}t8_u&FRNB{{S0VIF~kN^@u0!RP}AOR$R1dzbzOJD|G8^}(wnVFRTiaxXP&QW+_ zAj`6u{1{EzJfDfcn=3HLADM{t23B!C2v01`j~NB{{S0VIF~kN^@u0!ZNL zAuyg|*_jOeo*$>*vuXN0ouc2z$I>Zwa*Xc(Gc!+5mrzqAfCP{L59*h{}0a%OCSLxfCP{L5+!1Mo)#|=v%0VIF~kN^@u0!RP}AOR$R1dsp{c$x^% z_5W1bWjHneQGVyh-Kn2Uoynb=>}21|{4DLJew->YzsTqZdX(WZe%jlc`D{T^*x%Ug zTJ{!MY;KYIUZ+d8SBXbG|tK01E zRow<(t*uoqS62Cz)#}yx)f@b)l^gv0`r2}}22EV8)YkagGJLHsEnVP)`c`(@cbhKR zi53rq_|?i{WwlZ(SL*!DP_Wlp<6J)hN)~&SQ3aQ4{6b}^0^KRk*UR$@l?y>b3*vwMi*e-Hqxnp?qNY z)!IVkb^hif)d8;H8`%Nr27m5mywOH+fA&bWPzEK-!20fm49Mb7D?dBH5(a~ZF>*`0_p>UGX z;qwU?OKr!Z?zY-~YqZ{>P`SOeyWKh{N4@z}E?cOBqb&Q5;w$f1trpoSTh1-Ak?c*? zO^Qs#9VVGQq=vrZBxOgSdayp}yUja|!Q2|rFe|0um8YnbS=CrNO`QAMq~qonq(`g3-YJ z{{zo9FaZf50VIF~kN^@u0!RP}AOR$R1dza&jsRW%XU5-WxHs}YoceI`*2E9s0zXIq z2_OL^@T3rUXXa@3xFAe?=lb0yd5fM3pr>X0O}HlMB(H-f(ATP!>wGegw>s0g>(#X@ zaNMW7zFMzds~nV>uLsAk=s}}89B(SG@yU&Ws>{#U`B$t?aN?`CBUp7W@T0aIsC>D% zY0(oI6rmd~vFz?GesOjA>VZ}Vo5Qdnx?CGv_Ou*aQ_WZAhNu@8S**_;Ufly#`09V- z8~oW{J#@r4(HDX($JY9 zqjV{%58W{evD3%@xo~vrb6>xZ(7V$&jOpBGDf=i&f~uo*J2*yQpjY4=-f&~#t95@T zegFJSws51!?puQ+9R42Sg4MN#9KZ1Q)(3c~)NFi@DV{m1ivGS+T%2w{4N^kHjSDyZ zZR+B$-{$;n^mk7rc08#bgL3rhXnX@Ho;h@{la_kS?W95NeU%3rmf?=$7q>qc?vI8$ z_0eASH(;acgn~WoVY4z!fRd3N&XK1y4}XZ@G4_Uo4Y>Z%#;}*4<5@=VZ9JPha@6r` zu79|i&XFS-#m)-j+1&VH$lj5e{#1}Wi2C%L&BgcsJt?>Ns0R{20!RP}AOR$R1dsp{ PKmter2_S*bkHG%|05U2A literal 0 HcmV?d00001 diff --git a/.vs/vscode-nginx/v15/.suo b/.vs/vscode-nginx/v15/.suo new file mode 100644 index 0000000000000000000000000000000000000000..bbd46723ade6cba08ee1004d4d89b092255b0646 GIT binary patch literal 32768 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 + + + + NGINX + Syntax highlighting for NGINX configuration files. + + + + CHANGELOG.md + extension/nginx_logo.png + NGINX,__ext_conf + Languages + Public + + + + + + + + + + + + extension/nginx_logo.png + + + + + + + + + + + \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..cf0774a --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,31 @@ +# Changelog + +All notable changes to the "vscode-nginx" extension will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [Unreleased] + +## [0.7.0] - 2019-03-15 + +### Added + +- Updated syntax from https://nginx.org/en/docs + +### Changed + +- Converted syntax file from XML to JSON + +### Removed + +### Fixed + +## [0.6.0] - 2018-11-04 + +### Added + +- Initial release + +[Unreleased]: https://github.com/william-voyek/vscode-nginx/compare/v0.7.0...HEAD +[0.7.0]: https://github.com/william-voyek/vscode-nginx/compare/v0.6.0...v0.7.0 diff --git a/README.md b/README.md index c05d39b..9973ed2 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ -# NGINX syntax support for VS Code -Syntax highlighing for nginx conf files in Visual Studio Code. Ported from [johnmuhl/nginx-tmbundle][1]. +# NGINX configuration file syntax highlighting for VS Code +Syntax highlighing for nginx conf files in Visual Studio Code. Ported from [shanoor/vscode-nginx][1]. ## Installation Launch Code's command palette (Ctrl + P) and type @@ -8,5 +8,5 @@ Launch Code's command palette (Ctrl + P) and type This extension is published on the [VSCode marketplace][2]. -[1]: https://github.com/johnmuhl/nginx-tmbundle -[2]: https://marketplace.visualstudio.com/items?itemName=shanoor.vscode-nginx +[1]: https://github.com/shanoor/vscode-nginx +[2]: https://marketplace.visualstudio.com/items?itemName=william-voyek.vscode-nginx diff --git a/nginx.configuration.json b/nginx.configuration.json index 816f556..d5dfbd9 100644 --- a/nginx.configuration.json +++ b/nginx.configuration.json @@ -1,12 +1,24 @@ { "comments": { - // symbol used for single line comment. Remove this entry if your language does not support line comments - "lineComment": "#" + "lineComment": "#", }, - // symbols used as brackets "brackets": [ ["{", "}"], ["[", "]"], ["(", ")"] + ], + "autoClosingPairs": [ + ["{", "}"], + ["[", "]"], + ["(", ")"], + ["\"", "\""], + ["'", "'"] + ], + "surroundingPairs": [ + ["{", "}"], + ["[", "]"], + ["(", ")"], + ["\"", "\""], + ["'", "'"] ] -} +} \ No newline at end of file diff --git a/nginx_logo.png b/nginx_logo.png index ccf7f537c20376da03393e7567603b824c7f458c..81445f3e43aa86a6f0c0767a4972936b7a099997 100644 GIT binary patch literal 4583 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 BFlYb( diff --git a/package.json b/package.json index c9bf054..8b05ef4 100644 --- a/package.json +++ b/package.json @@ -1,39 +1,31 @@ { "name": "vscode-nginx", - "displayName": "nginx.conf", - "description": "Syntax highlighter for nginx conf files.", - "version": "0.6.0", - "publisher": "shanoor", + "displayName": "NGINX Configuration", + "description": "Syntax highlighting for NGINX configuration files", + "version": "0.0.1", + "publisher": "william-voyek", "engines": { - "vscode": "^1.0.0" - }, - "repository": { - "type": "GitHub", - "url": "https://github.com/shanoor/vscode-nginx" + "vscode": "^1.32.0" }, + "repository": { + "type": "GitHub", + "url": "https://github.com/william-voyek/vscode-nginx" + }, "categories": [ - "Languages" + "Programming Languages" ], "contributes": { - "languages": [ - { - "id": "NGINX", - "aliases": [ - "NGINX" - ], - "extensions": [ - ".conf" - ], - "configuration": "./nginx.configuration.json" - } - ], - "grammars": [ - { - "language": "NGINX", - "scopeName": "source.nginx", - "path": "./syntaxes/nginx.tmLanguage" - } - ] + "languages": [{ + "id": "nginx", + "aliases": ["NGINX Conf", "nginx"], + "extensions": [".conf",".nginx"], + "configuration": "./language-configuration.json" + }], + "grammars": [{ + "language": "nginx", + "scopeName": "source.nginx", + "path": "./syntaxes/nginx.tmLanguage.json" + }] }, "icon": "nginx_logo.png" -} +} \ No newline at end of file diff --git a/syntaxes/nginx.tmLanguage b/syntaxes/nginx.tmLanguage deleted file mode 100644 index c0bf521..0000000 --- a/syntaxes/nginx.tmLanguage +++ /dev/null @@ -1,278 +0,0 @@ - - - - - fileTypes - - conf - nginx - - foldingStartMarker - \{\s*$ - foldingStopMarker - ^\s*\} - keyEquivalent - ^~N - name - nginx - patterns - - - match - \#.* - name - comment - - - match - \b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(:\d{1,5})?\b - name - constant.numeric - - - match - \b\d+\w+\b - name - constant.numeric - - - match - \{|\} - name - constant.character.brace - - - match - \; - name - constant.character.end - - - match - \(|\) - name - constant.character.paren - - - match - \" - name - constant.character.quote - - - match - \\.*\ |\~|\~\*|\!\~|\!\~\* - name - string.regexp - - - match - \"(.*)\" - name - string.quoted - - - match - \'(.*)\' - name - string.quoted - - - match - \b(events)\b - name - constant.language.module.events - - - match - \b^(http)\b - name - constant.language.module.http - - - match - \b(daemon|env|debug_points|error_log|log_not_found|include|lock_file|master_process|pid|ssl_engine|timer_resolution|types_hash_max_size|user|worker_cpu_affinity|worker_priority|worker_processes|worker_rlimit_core|worker_rlimit_nofile|worker_rlimit_sigpending|working_directory|try_files)\b - name - constant.language.directive.module.main - - - match - \b(accept_mutex|accept_mutex_delay|debug_connection|devpoll_changes|devpoll_events|epoll_events|kqueue_changes|kqueue_events|multi_accept|rtsig_signo|rtsig_overflow_events|rtsig_overflow_test|rtsig_overflow_threshold|use|worker_connections)\b - name - constant.language.directive.module.events - - - match - \b(alias|chunked_transfer_encoding|client_body_in_file_only|client_body_buffer_size|client_body_temp_path|client_body_timeout|client_header_buffer_size|client_header_timeout|client_max_body_size|default_type|error_page|index\ |internal|keepalive_timeout|keepalive_requests|large_client_header_buffers|limit_except|limit_rate|listen|location|msie_padding|msie_refresh|optimize_server_names|port_in_redirect|recursive_error_pages|reset_timedout_connection|resolver|resolver_timeout|root|satisfy_any|send_timeout|sendfile|server|server_name|server_names_hash_max_size|server_names_hash_bucket_size|tcp_nodelay|tcp_nopush|types\ |try_files)\b - name - constant.language.directive.module.http - - - match - \b(add_before_body|add_after_body|addition_types)\b - name - constant.language.module.http.addition - - - match - \b(allow|deny)\b - name - constant.language.module.http.access - - - match - \b(auth_basic|auth_basic_user_file)\b - name - constant.language.module.http.auth_basic - - - match - \b(auth_jwt|auth_jwt_header_set|auth_jwt_claim_set|auth_jwt_key_file)\b - name - constant.language.module.http.auth_jwt - - - match - \b(autoindex|autoindex_exact_size|autoindex_format|autoindex_localtime)\b - name - constant.language.module.http.autoindex - - - match - \b(ancient_browser|ancient_browser_value|modern_browser|modern_browser_value)\b - name - constant.language.module.http.browser - - - match - \b(charset|charset_map|override_charset|source_charset)\b - name - constant.language.module.http.charset - - - match - \b(empty_gif)\b - name - constant.language.module.http.empty_gif - - - match - \b(fastcgi_index|fastcgi_hide_header|fastcgi_ignore_client_abort|fastcgi_intercept_errors|fastcgi_param|fastcgi_pass|fastcgi_pass_header|fastcgi_read_timeout|fastcgi_redirect_errors|fa|stcgi_storefastcgi_store_access|fastcgi_buffers|fastcgi_buffers_size|fastcgi_temp_path|fastcgi_buffer_size|fastcgi_connect_timeout|fastcgi_send_timeout|fastcgi_split_path_info)\b - name - constant.language.module.http.fastcgi - - - match - \b(geo)\b - name - constant.language.module.http.geo - - - match - \b(gzip|gzip_buffers|gzip_comp_level|gzip_disable|gzip_http.version|gzip_min_length|gzip_proxied|gzip_types|gzip_vary)\b - name - constant.language.module.http.gzip - - - match - \b(add_header|expires|server_tokens)\b - name - constant.language.module.http.headers - - - match - \b(valid_referers)\b - name - constant.language.module.http.referer - - - match - \b(limit_zone|limit_conn)\b - name - constant.language.module.http.limit_zone - - - match - \b(limit_req|limit_req_log_level|limit_req_status|limit_req_zone)\b - name - constant.language.module.http.limit_req - - - match - \b(access_log|log_format)\b - name - constant.language.module.http.log - - - match - \b(map|map_hash_max_size|map_hash_bucket_size)\b - name - constant.language.module.http.map - - - match - \b(memcached_pass|memcached_connect_timeout|memcached_send_timeout|memcached_read_timeout|memcached_buffer_size|memcached_next_upstream)\b - name - constant.language.module.http.memcached - - - match - \b(proxy_buffer_size|proxy_buffering|proxy_buffers|proxy_busy_buffers_size|proxy_cache|proxy_cache_background_update|proxy_cache_bypass|proxy_cache_convert_head|proxy_cache_key|proxy_cache_lock|proxy_cache_lock_age|proxy_cache_lock_timeout|proxy_cache_max_range_offset|proxy_cache_methods|proxy_cache_min_uses|proxy_cache_path|proxy_cache_purge|proxy_cache_revalidate|proxy_cache_use_stale|proxy_cache_valid|proxy_connect_timeout|proxy_headers_hash_bucket_size|proxy_headers_hash_max_size|proxy_hide_header|proxy_http_version|proxy_ignore_client_abort|proxy_intercept_errors|proxy_max_temp_file_size|proxy_method|proxy_next_upstream|proxy_next_upstream_tries|proxy_next_upstream_timeout|proxy_pass|proxy_pass_header|proxy_pass_request_body|proxy_pass_request_headers|proxy_read_timeout|proxy_redirect|proxy_redirect_errors|proxy_send_lowat|proxy_send_timeout|proxy_set_body|proxy_set_header|proxy_store|proxy_store_access|proxy_temp_file_write_size|proxy_t|emp_pathproxy_upstream_fail_timeout|proxy_upstream_max_fails|proxy_no_cache)\b - name - constant.language.module.http.proxy - - - match - \b(set_real_ip_from|real_ip_header|real_ip_recursive)\b - name - constant.language.module.http.realip - - - match - \b(break|if|return|reqrite|set|uninitialized_variable_warn)\b - name - constant.language.module.http.rewrite - - - match - \b(ssi|ssi_silent_errors|ssi_types|ssi_value_length)\b - name - constant.language.module.http.ssi - - - match - \b(ip_hash|upstream|server)\b - name - constant.language.module.http.upstream - - - match - \b(userid|userid_domain|userid_expires|userid_name|userid_p3p|userid_path|userid_service)\b - name - constant.language.module.http.userid - - - match - \b(uwsgi_bind|uwsgi_buffer_size|uwsgi_buffering|uwsgi_buffers|uwsgi_busy_buffers_size|uwsgi_cache|uwsgi_cache_background_update|uwsgi_cache_bypass|uwsgi_cache_key|uwsgi_cache_lock|uwsgi_cache_lock_age|uwsgi_cache_lock_timeout|uwsgi_cache_max_range_offset|uwsgi_cache_methods|uwsgi_cache_min_uses|uwsgi_cache_path|uwsgi_cache_purge|uwsgi_cache_revalidate|uwsgi_cache_use_stale|uwsgi_cache_valid|uwsgi_connect_timeout|uwsgi_force_ranges|uwsgi_hide_header|uwsgi_ignore_client_abort|uwsgi_ignore_headers|uwsgi_intercept_errors|uwsgi_limit_rate|uwsgi_max_temp_file_size|uwsgi_modifier1|uwsgi_modifier2|uwsgi_next_upstream|uwsgi_next_upstream_timeout|uwsgi_next_upstream_tries|uwsgi_no_cache|uwsgi_param|uwsgi_pass|uwsgi_pass_header|uwsgi_pass_request_body|uwsgi_pass_request_headers|uwsgi_read_timeout|uwsgi_request_buffering|uwsgi_send_timeout|uwsgi_ssl_certificate|uwsgi_ssl_certificate_key|uwsgi_ssl_ciphers|uwsgi_ssl_crl|uwsgi_ssl_name|uwsgi_ssl_password_file|uwsgi_ssl_protocols|uwsgi_ssl_server_name|uwsgi_ssl_session_reuse|uwsgi_ssl_trusted_certificate|uwsgi_ssl_verify|uwsgi_ssl_verify_depth|uwsgi_store|uwsgi_store_access|uwsgi_temp_file_write_size|uwsgi_temp_path)\b - name - constant.language.module.http.uwsgi - - - match - \b(ssl|ssl_buffer_size|ssl_certificate|ssl_certificate_key|ssl_ciphers|ssl_client_certificate|ssl_crl|ssl_dhparam|ssl_ecdh_curve|ssl_password_file|ssl_prefer_server_ciphers|ssl_protocols|ssl_session_cache|ssl_session_ticket_key|ssl_session_tickets|ssl_session_timeout|ssl_stapling|ssl_stapling_file|ssl_stapling_responder|ssl_stapling_verify|ssl_trusted_certificate|ssl_verify_client|ssl_verify_depth)\b - name - constant.language.directive.module.http - - - match - \$\w+ - name - variable - - - scopeName - source.nginx - uuid - 0C04066A-12D2-43CA-8238-00A12CE4C12D - - diff --git a/syntaxes/nginx.tmLanguage.json b/syntaxes/nginx.tmLanguage.json new file mode 100644 index 0000000..e80553a --- /dev/null +++ b/syntaxes/nginx.tmLanguage.json @@ -0,0 +1,424 @@ +{ + "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json", + "fileTypes": [ + "conf", + "nginx" + ], + "foldingStartMarker": "\\{\\s*$", + "foldingStopMarker": "^\\s*\\}", + "keyEquivalent": "^~N", + "name": "NGINX Conf", + "patterns": [{ + "include": "#keywords" + }, + { + "include": "#strings" + }, + { + "match": "\\#.*", + "name": "comment" + }, + { + "match": "\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b", + "name": "constant.numeric" + }, + { + "match": "\\b\\d+\\w+\\b", + "name": "constant.numeric" + }, + { + "match": "\\{|\\}", + "name": "constant.character.brace" + }, + { + "match": "\\;", + "name": "constant.character.end" + }, + { + "match": "\\(|\\)", + "name": "constant.character.paren" + }, + { + "match": "\\\"", + "name": "constant.character.quote" + }, + { + "match": "\\\\.*\\ |\\~|\\~\\*|\\!\\~|\\!\\~\\*", + "name": "string.regexp" + }, + { + "match": "\\\"(.*)\\\"", + "name": "string.quoted" + }, + { + "match": "\\'(.*)\\'", + "name": "string.quoted" + }, + { + "match": "\\b(events)\\b", + "name": "constant.language.module.events" + }, + { + "match": "\\b^(http)\\b", + "name": "constant.language.module.http" + }, + { + "match": "\\$\\w+", + "name": "variable" + }, + { + "match": "\\b(accept_mutex|accept_mutex_delay|daemon|debug_connection|debug_points|env|error_log|events|include|kqueue_changes|kqueue_events|load_module|lock_file|master_process|multi_accept|optimize_server_names|pcre_jit|pid|ssl_engine|thread_pool|timer_resolution|use|user|worker_aio_requests|worker_connections|worker_cpu_affinity|worker_priority|worker_processes|worker_rlimit_core|worker_rlimit_nofile|worker_shutdown_timeout|working_directory)\\b", + "name": "constant.language.module.core" + }, + { + "match": "\\b(google_perftools_profiles)\\b", + "name": "constant.language.module.google.perftools" + }, + { + "match": "\\b(allow|deny)\\b", + "name": "constant.language.module.http.access" + }, + { + "match": "\\b(add_before_body|add_after_body|addition_types)\\b", + "name": "constant.language.module.http.addition" + }, + { + "match": "\\b(auth_basic|auth_basic_user_file)\\b", + "name": "constant.language.module.http.auth_basic" + }, + { + "match": "\\b(auth_jwt|auth_jwt_claim_set|auth_jwt_header_set|auth_jwt_key_file|auth_jwt_key_request|auth_jwt_leeway)\\b", + "name": "constant.language.module.http.auth_jwt" + }, + { + "match": "\\b(auth_request|auth_request_set)\\b", + "name": "constant.language.module.http.auth_request" + }, + { + "match": "\\b(autoindex|autoindex_exact_size|autoindex_format|autoindex_localtime)\\b", + "name": "constant.language.module.http.autoindex" + }, + { + "match": "\\b(ancient_browser|ancient_browser_value|modern_browser|modern_browser_value)\\b", + "name": "constant.language.module.http.browser" + }, + { + "match": "\\b(charset|charset_map|charset_types|override_charset|source_charset)\\b", + "name": "constant.language.module.http.charset" + }, + { + "match": "\\b(absolute_redirect|aio|aio_write|alias|chunked_transfer_encoding|client_body_buffer_size|client_body_in_file_only|client_body_in_single_buffer|client_body_temp_path|client_body_timeout|client_header_buffer_size|client_header_timeout|client_max_body_size|connection_pool_size|default_type|directio|directio_alignment|disable_symlinks|error_page|etag|http|if_modified_since|ignore_invalid_headers|internal|keepalive_disable|keepalive_requests|keepalive_timeout|large_client_header_buffers|limit_except|limit_rate|limit_rate_after|lingering_close|lingering_time|lingering_timeout|listen|location|log_not_found|log_subrequest|max_ranges|merge_slashes|msie_padding|msie_refresh|open_file_cache|open_file_cache_errors|open_file_cache_min_uses|open_file_cache_valid|output_buffers|port_in_redirect|postpone_output|read_ahead|recursive_error_pages|request_pool_size|reset_timedout_connection|resolver|resolver_timeout|root|satisfy|send_lowat|send_timeout|sendfile|sendfile_max_chunk|server|server_name|server_name_in_redirect|server_names_hash_bucket_size|server_names_hash_max_size|server_tokens|subrequest_output_buffer_size|tcp_nodelay|tcp_nopush|try_files|types|types_hash_bucket_size|types_hash_max_size|underscores_in_headers|variables_hash_bucket_size|variables_hash_max_size)\\b", + "name": "constant.language.module.http.core" + }, + { + "match": "\\b(create_full_put_path|dav_access|dav_methods|min_delete_depth)\\b", + "name": "constant.language.module.http.dav" + }, + { + "match": "\\b(empty_gif)\\b", + "name": "constant.language.module.http.empty_gif" + }, + { + "match": "\\b(f4f|f4f_buffer_size)\\b", + "name": "constant.language.module.http.f4f" + }, + { + "match": "\\b(fastcgi_bind|fastcgi_buffer_size|fastcgi_buffering|fastcgi_buffers|fastcgi_buffers_size|fastcgi_busy_buffers_size|fastcgi_cache|fastcgi_cache_background_update|fastcgi_cache_bypass|fastcgi_cache_key|fastcgi_cache_lock|fastcgi_cache_lock_age|fastcgi_cache_lock_timeout|fastcgi_cache_max_range_offset|fastcgi_cache_methods|fastcgi_cache_min_uses|fastcgi_cache_path|fastcgi_cache_purge|fastcgi_cache_revalidate|fastcgi_cache_use_stale|fastcgi_cache_valid|fastcgi_catch_stderr|fastcgi_connect_timeout|fastcgi_force_ranges|fastcgi_hide_header|fastcgi_ignore_client_abort|fastcgi_ignore_headers|fastcgi_index|fastcgi_intercept_errors|fastcgi_keep_conn|fastcgi_limit_rate|fastcgi_max_temp_file_size|fastcgi_next_upstream|fastcgi_next_upstream_timeout|fastcgi_next_upstream_tries|fastcgi_no_cache|fastcgi_param|fastcgi_pass|fastcgi_pass_header|fastcgi_pass_request_body|fastcgi_pass_request_headers|fastcgi_read_timeout|fastcgi_redirect_errors|fastcgi_request_buffering|fastcgi_send_lowat|fastcgi_send_timeout|fastcgi_socket_keepalive|fastcgi_split_path_info|fastcgi_store|fastcgi_store_access|fastcgi_temp_file_write_size|fastcgi_temp_path)\\b", + "name": "constant.language.module.http.fastcgi" + }, + { + "match": "\\b(flv)\\b", + "name": "constant.language.module.http.flv" + }, + { + "match": "\\b(geoip_country|geoip_city|geoip_org|geoip_proxy|geoip_proxy_recursive)\\b", + "name": "constant.language.module.http.geoip" + }, + { + "match": "\\b(geo)\\b", + "name": "constant.language.module.http.geo" + }, + { + "match": "\\b(grpc_bind|grpc_buffer_size|grpc_connect_timeout|grpc_hide_header|grpc_ignore_headers|grpc_intercept_errors|grpc_next_upstream|grpc_next_upstream_timeout|grpc_next_upstream_tries|grpc_pass|grpc_pass_header|grpc_read_timeout|grpc_send_timeout|grpc_set_header|grpc_socket_keepalive|grpc_ssl_certificate|grpc_ssl_certificate_key|grpc_ssl_ciphers|grpc_ssl_crl|grpc_ssl_name|grpc_ssl_password_file|grpc_ssl_protocols|grpc_ssl_server_name|grpc_ssl_session_reuse|grpc_ssl_trusted_certificate|grpc_ssl_verify|grpc_ssl_verify_depth)\\b", + "name": "constant.language.module.http.grpc" + }, + { + "match": "\\b(gunzip|gunzip_buffers)\\b", + "name": "constant.language.module.http.gunzip" + }, + { + "match": "\\b(gzip|gzip_buffers|gzip_comp_level|gzip_disable|gzip_http_version|gzip_min_length|gzip_proxied|gzip_types|gzip_vary)\\b", + "name": "constant.language.module.http.gzip" + }, + { + "match": "\\b(gzip_static)\\b", + "name": "constant.language.module.http.gzip_static" + }, + { + "match": "\\b(add_header|add_trailer|expires)\\b", + "name": "constant.language.module.http.headers" + }, + { + "match": "\\b(hls|hls_buffers|hls_forward_args|hls_fragment|hls_mp4_buffer_size|hls_mp4_max_buffer_size)\\b", + "name": "constant.language.module.http.hls" + }, + { + "match": "\\b(image_filter|image_filter_buffer|image_filter_interlace|image_filter_jpeg_quality|image_filter_sharpen|image_filter_transparency|image_filter_webp_quality)\\b", + "name": "constant.language.module.http.image_filter" + }, + { + "match": "\\b(index)\\b", + "name": "constant.language.module.http.index" + }, + { + "match": "\\b(js_content|js_include|js_set)\\b", + "name": "constant.language.module.http.js" + }, + { + "match": "\\b(keyval|keyval_zone)\\b", + "name": "constant.language.module.http.keyval" + }, + { + "match": "\\b(limit_conn|limit_conn_log_level|limit_conn_status|limit_conn_zone|limit_zone)\\b", + "name": "constant.language.module.http.limit_conn" + }, + { + "match": "\\b(limit_req|limit_req_log_level|limit_req_status|limit_req_zone)\\b", + "name": "constant.language.module.http.limit_req" + }, + { + "match": "\\b(access_log|log_format|open_log_file_cache)\\b", + "name": "constant.language.module.http.log" + }, + { + "match": "\\b(map|map_hash_bucket_size|map_hash_max_size)\\b", + "name": "constant.language.module.http.map" + }, + { + "match": "\\b(memcached_bind|memcached_buffer_size|memcached_connect_timeout|memcached_force_ranges|memcached_gzip_flag|memcached_next_upstream|memcached_next_upstream_timeout|memcached_next_upstream_tries|memcached_pass|memcached_read_timeout|memcached_send_timeout|memcached_socket_keepalive)\\b", + "name": "constant.language.module.http.memcached" + }, + { + "match": "\\b(mirror|mirror_request_body)\\b", + "name": "constant.language.module.http.mirror" + }, + { + "match": "\\b(mp4|mp4_buffer_size|mp4_max_buffer_size|mp4_limit_rate|mp4_limit_rate_after)\\b", + "name": "constant.language.module.http.mp4" + }, + { + "match": "\\b(perl|perl_modules|perl_require|perl_set)\\b", + "name": "constant.language.module.http.perl" + }, + { + "match": "\\b(proxy_bind|proxy_buffer_size|proxy_buffering|proxy_buffers|proxy_busy_buffers_size|proxy_cache|proxy_cache_background_update|proxy_cache_bypass|proxy_cache_convert_head|proxy_cache_key|proxy_cache_lock|proxy_cache_lock_age|proxy_cache_lock_timeout|proxy_cache_max_range_offset|proxy_cache_methods|proxy_cache_min_uses|proxy_cache_path|proxy_cache_purge|proxy_cache_revalidate|proxy_cache_use_stale|proxy_cache_valid|proxy_connect_timeout|proxy_cookie_domain|proxy_cookie_path|proxy_force_ranges|proxy_headers_hash_bucket_size|proxy_headers_hash_max_size|proxy_hide_header|proxy_http_version|proxy_ignore_client_abort|proxy_ignore_headers|proxy_intercept_errors|proxy_limit_rate|proxy_max_temp_file_size|proxy_method|proxy_next_upstream|proxy_next_upstream_timeout|proxy_next_upstream_tries|proxy_no_cache|proxy_pass|proxy_pass_header|proxy_pass_request_body|proxy_pass_request_headers|proxy_read_timeout|proxy_redirect|proxy_redirect_errors|proxy_request_buffering|proxy_send_lowat|proxy_send_timeout|proxy_set_body|proxy_set_header|proxy_socket_keepalive|proxy_ssl_certificate|proxy_ssl_certificate_key|proxy_ssl_ciphers|proxy_ssl_crl|proxy_ssl_name|proxy_ssl_password_file|proxy_ssl_protocols|proxy_ssl_server_name|proxy_ssl_session_reuse|proxy_ssl_trusted_certificate|proxy_ssl_verify|proxy_ssl_verify_depth|proxy_store|proxy_store_access|proxy_t|proxy_temp_file_write_size|proxy_temp_path|proxy_upstream_max_fails)\\b", + "name": "constant.language.module.http.proxy" + }, + { + "match": "\\b(random_index)\\b", + "name": "constant.language.module.http.random_index" + }, + { + "match": "\\b(set_real_ip_from|real_ip_header|real_ip_recursive)\\b", + "name": "constant.language.module.http.realip" + }, + { + "match": "\\b(referer_hash_bucket_size|referer_hash_max_size|valid_referers)\\b", + "name": "constant.language.module.http.referer" + }, + { + "match": "\\b(break|if|return|rewrite|rewrite_log|set|uninitialized_variable_warn)\\b", + "name": "constant.language.module.http.rewrite" + }, + { + "match": "\\b(scgi_bind|scgi_buffer_size|scgi_buffering|scgi_buffers|scgi_busy_buffers_size|scgi_cache|scgi_cache_background_update|scgi_cache_bypass|scgi_cache_key|scgi_cache_lock|scgi_cache_lock_age|scgi_cache_lock_timeout|scgi_cache_max_range_offset|scgi_cache_methods|scgi_cache_min_uses|scgi_cache_path|scgi_cache_purge|scgi_cache_revalidate|scgi_cache_use_stale|scgi_cache_valid|scgi_connect_timeout|scgi_force_ranges|scgi_hide_header|scgi_ignore_client_abort|scgi_ignore_headers|scgi_intercept_errors|scgi_limit_rate|scgi_max_temp_file_size|scgi_next_upstream|scgi_next_upstream_timeout|scgi_next_upstream_tries|scgi_no_cache|scgi_param|scgi_pass|scgi_pass_header|scgi_pass_request_body|scgi_pass_request_headers|scgi_read_timeout|scgi_request_buffering|scgi_send_timeout|scgi_socket_keepalive|scgi_store|scgi_store_access|scgi_temp_file_write_size|scgi_temp_path)\\b", + "name": "constant.language.module.http.scgi" + }, + { + "match": "\\b(secure_link|secure_link_md5|secure_link_secret)\\b", + "name": "constant.language.module.http.secure_link" + }, + { + "match": "\\b(session_log|session_log_format|session_log_zone)\\b", + "name": "constant.language.module.http.session_log" + }, + { + "match": "\\b(slice)\\b", + "name": "constant.language.module.http.slice" + }, + { + "match": "\\b(spdy_chunk_size|spdy_headers_comp)\\b", + "name": "constant.language.module.http.spdy" + }, + { + "match": "\\b(split_clients)\\b", + "name": "constant.language.module.http.split_clients" + }, + { + "match": "\\b(ssi|ssi_last_modified|ssi_min_file_chunk|ssi_silent_errors|ssi_types|ssi_value_length)\\b", + "name": "constant.language.module.http.ssi" + }, + { + "match": "\\b(ssl|ssl_buffer_size|ssl_certificate|ssl_certificate_key|ssl_ciphers|ssl_client_certificate|ssl_crl|ssl_dhparam|ssl_early_data|ssl_ecdh_curve|ssl_password_file|ssl_prefer_server_ciphers|ssl_protocols|ssl_session_cache|ssl_session_ticket_key|ssl_session_tickets|ssl_session_timeout|ssl_stapling|ssl_stapling_file|ssl_stapling_responder|ssl_stapling_verify|ssl_trusted_certificate|ssl_verify_client|ssl_verify_depth)\\b", + "name": "constant.language.module.http.ssl" + }, + { + "match": "\\b(status|status_format|status_zone)\\b", + "name": "constant.language.module.http.status" + }, + { + "match": "\\b(stub_status)\\b", + "name": "constant.language.module.http.stub_status" + }, + { + "match": "\\b(sub_filter|sub_filter_last_modified|sub_filter_once|sub_filter_types)\\b", + "name": "constant.language.module.http.sub" + }, + { + "match": "\\b(upstream_conf)\\b", + "name": "constant.language.module.http.upstream_conf" + }, + { + "match": "\\b(health_check|match)\\b", + "name": "constant.language.module.http.upstream_hc" + }, + { + "match": "\\b(upstream|server|zone|state|hash|ip_hash|keepalive|keepalive_requests|keepalive_timeout|ntlm|least_conn|least_time|queue|random|sticky|sticky_cookie_insert)\\b", + "name": "constant.language.module.http.upstream" + }, + { + "match": "\\b(userid|userid_domain|userid_expires|userid_mark|userid_name|userid_p3p|userid_path|userid_service)\\b", + "name": "constant.language.module.http.userid" + }, + { + "match": "\\b(uwsgi_bind|uwsgi_buffer_size|uwsgi_buffering|uwsgi_buffers|uwsgi_busy_buffers_size|uwsgi_cache|uwsgi_cache_background_update|uwsgi_cache_bypass|uwsgi_cache_key|uwsgi_cache_lock|uwsgi_cache_lock_age|uwsgi_cache_lock_timeout|uwsgi_cache_max_range_offset|uwsgi_cache_methods|uwsgi_cache_min_uses|uwsgi_cache_path|uwsgi_cache_purge|uwsgi_cache_revalidate|uwsgi_cache_use_stale|uwsgi_cache_valid|uwsgi_connect_timeout|uwsgi_force_ranges|uwsgi_hide_header|uwsgi_ignore_client_abort|uwsgi_ignore_headers|uwsgi_intercept_errors|uwsgi_limit_rate|uwsgi_max_temp_file_size|uwsgi_modifier1|uwsgi_modifier2|uwsgi_next_upstream|uwsgi_next_upstream_timeout|uwsgi_next_upstream_tries|uwsgi_no_cache|uwsgi_param|uwsgi_pass|uwsgi_pass_header|uwsgi_pass_request_body|uwsgi_pass_request_headers|uwsgi_read_timeout|uwsgi_request_buffering|uwsgi_send_timeout|uwsgi_socket_keepalive|uwsgi_ssl_certificate|uwsgi_ssl_certificate_key|uwsgi_ssl_ciphers|uwsgi_ssl_crl|uwsgi_ssl_name|uwsgi_ssl_password_file|uwsgi_ssl_protocols|uwsgi_ssl_server_name|uwsgi_ssl_session_reuse|uwsgi_ssl_trusted_certificate|uwsgi_ssl_verify|uwsgi_ssl_verify_depth|uwsgi_store|uwsgi_store_access|uwsgi_temp_file_write_size|uwsgi_temp_path)\\b", + "name": "constant.language.module.http.uwsgi" + }, + { + "match": "\\b(http2_body_preread_size|http2_chunk_size|http2_idle_timeout|http2_max_concurrent_pushes|http2_max_concurrent_streams|http2_max_field_size|http2_max_header_size|http2_max_requests|http2_push|http2_push_preload|http2_recv_buffer_size|http2_recv_timeout)\\b", + "name": "constant.language.module.http.v2" + }, + { + "match": "\\b(xml_entities|xslt_last_modified|xslt_param|xslt_string_param|xslt_stylesheet|xslt_types)\\b", + "name": "constant.language.module.http.xslt" + }, + { + "match": "\\b(auth_http|auth_http_header|auth_http_pass_client_cert|auth_http_timeout)\\b", + "name": "constant.language.module.mail.auth_http" + }, + { + "match": "\\b(listen|mail|protocol|resolver|resolver_timeout|server|server_name|timeout)\\b", + "name": "constant.language.module.mail.core" + }, + { + "match": "\\b(imap_auth|imap_capabilities|imap_client_buffer)\\b", + "name": "constant.language.module.mail.imap" + }, + { + "match": "\\b(pop3_auth|pop3_capabilities)\\b", + "name": "constant.language.module.mail.pop3" + }, + { + "match": "\\b(proxy_buffer|proxy_pass_error_message|proxy_timeout|xclient)\\b", + "name": "constant.language.module.mail.proxy" + }, + { + "match": "\\b(smtp_auth|smtp_capabilities|smtp_client_buffer|smtp_greeting_delay)\\b", + "name": "constant.language.module.mail.smtp" + }, + { + "match": "\\b(ssl|ssl_certificate|ssl_certificate_key|ssl_ciphers|ssl_client_certificate|ssl_crl|ssl_dhparam|ssl_ecdh_curve|ssl_password_file|ssl_prefer_server_ciphers|ssl_protocols|ssl_session_cache|ssl_session_ticket_key|ssl_session_tickets|ssl_session_timeout|ssl_trusted_certificate|ssl_verify_client|ssl_verify_depth|starttls)\\b", + "name": "constant.language.module.mail.ssl" + }, + { + "match": "\\b(allow|deny)\\b", + "name": "constant.language.module.stream.access" + }, + { + "match": "\\b(listen|preread_buffer_size|preread_timeout|proxy_protocol_timeout|resolver|resolver_timeout|server|stream|tcp_nodelay|variables_hash_bucket_size|variables_hash_max_size)\\b", + "name": "constant.language.module.stream.core" + }, + { + "match": "\\b(geoip_country|geoip_city|geoip_org)\\b", + "name": "constant.language.module.stream.geoip" + }, + { + "match": "\\b(geo)\\b", + "name": "constant.language.module.stream.geo" + }, + { + "match": "\\b(js_access|js_filter|js_include|js_preread|js_set)\\b", + "name": "constant.language.module.stream.js" + }, + { + "match": "\\b(keyval|keyval_zone)\\b", + "name": "constant.language.module.stream.keyval" + }, + { + "match": "\\b(limit_conn|limit_conn_log_level|limit_conn_zone)\\b", + "name": "constant.language.module.stream.limit_conn" + }, + { + "match": "\\b(access_log|log_format|open_log_file_cache)\\b", + "name": "constant.language.module.stream.log" + }, + { + "match": "\\b(map|map_hash_bucket_size|map_hash_max_size)\\b", + "name": "constant.language.module.stream.map" + }, + { + "match": "\\b(proxy_bind|proxy_buffer_size|proxy_connect_timeout|proxy_download_rate|proxy_next_upstream|proxy_next_upstream_timeout|proxy_next_upstream_tries|proxy_pass|proxy_protocol|proxy_requests|proxy_responses|proxy_socket_keepalive|proxy_ssl|proxy_ssl_certificate|proxy_ssl_certificate_key|proxy_ssl_ciphers|proxy_ssl_crl|proxy_ssl_name|proxy_ssl_password_file|proxy_ssl_protocols|proxy_ssl_server_name|proxy_ssl_session_reuse|proxy_ssl_trusted_certificate|proxy_ssl_verify|proxy_ssl_verify_depth|proxy_timeout|proxy_upload_rate)\\b", + "name": "constant.language.module.stream.proxy" + }, + { + "match": "\\b(set_real_ip_from)\\b", + "name": "constant.language.module.stream.realip" + }, + { + "match": "\\b(return)\\b", + "name": "constant.language.module.stream.return" + }, + { + "match": "\\b(split_clients)\\b", + "name": "constant.language.module.stream.split_clients" + }, + { + "match": "\\b(ssl_certificate|ssl_certificate_key|ssl_ciphers|ssl_client_certificate|ssl_crl|ssl_dhparam|ssl_ecdh_curve|ssl_handshake_timeout|ssl_password_file|ssl_prefer_server_ciphers|ssl_protocols|ssl_session_cache|ssl_session_ticket_key|ssl_session_tickets|ssl_session_timeout|ssl_trusted_certificate|ssl_verify_client|ssl_verify_depth)\\b", + "name": "constant.language.module.stream.ssl" + }, + { + "match": "\\b(ssl_preread)\\b", + "name": "constant.language.module.stream.ssl_preread" + }, + { + "match": "\\b(health_check|health_check_timeout|match)\\b", + "name": "constant.language.module.stream.upstream_hc" + }, + { + "match": "\\b(upstream|server|zone|state|hash|least_conn|least_time|random)\\b", + "name": "constant.language.module.stream.upstream" + }, + { + "match": "\\b(zone_sync|zone_sync_buffers|zone_sync_connect_retry_interval|zone_sync_connect_timeout|zone_sync_interval|zone_sync_recv_buffer_size|zone_sync_server|zone_sync_ssl|zone_sync_ssl_certificate|zone_sync_ssl_certificate_key|zone_sync_ssl_ciphers|zone_sync_ssl_crl|zone_sync_ssl_name|zone_sync_ssl_password_file|zone_sync_ssl_protocols|zone_sync_ssl_server_name|zone_sync_ssl_trusted_certificate|zone_sync_ssl_verify|zone_sync_ssl_verify_depth|zone_sync_timeout)\\b", + "name": "constant.language.module.stream.zone_sync" + } + ], + "repository": { + "keywords": { + "patterns": [{ + "name": "keyword.control.nginx", + "match": "\\b(if|while|for|return)\\b" + }] + }, + "strings": { + "name": "string.quoted.double.nginx", + "begin": "\"", + "end": "\"", + "patterns": [{ + "name": "constant.character.escape.nginx", + "match": "\\\\." + }] + } + }, + "scopeName": "source.nginx" +} \ No newline at end of file diff --git a/vsc-extension-quickstart.md b/vsc-extension-quickstart.md index 1e5845d..db5e228 100644 --- a/vsc-extension-quickstart.md +++ b/vsc-extension-quickstart.md @@ -1,27 +1,29 @@ # Welcome to your VS Code Extension ## What's in the folder -* This folder contains all of the files necessary for your extension -* `package.json` - this is the manifest file in which you declare your language support and define -the location of the grammar file that has been copied into you extension. -* `syntaxes/nginx.tmLanguage` - this is the Text mate grammar file that is used for tokenization -* `nginx.configuration.json` - this the language configuration, defining the tokens that are used for -comments and brackets. + +* This folder contains all of the files necessary for your extension. +* `package.json` - this is the manifest file in which you declare your language support and define the location of the grammar file that has been copied into your extension. +* `syntaxes/nginx.tmLanguage` - this is the Text mate grammar file that is used for tokenization. +* `language-configuration.json` - this is the language configuration, defining the tokens that are used for comments and brackets. ## Get up and running straight away -* Make sure the language configuration settings in `nginx.configuration.json` are accurate -* press `F5` to open a new window with your extension loaded -* create a new file with a file name suffix matching your language -* verify that syntax highlight works and that the language configuration settings are working + +* Make sure the language configuration settings in `language-configuration.json` are accurate. +* Press `F5` to open a new window with your extension loaded. +* Create a new file with a file name suffix matching your language. +* Verify that syntax highlighting works and that the language configuration settings are working. ## Make changes -* you can relaunch the extension from the debug toolbar after making changes to the files listed above -* you can also reload (`Ctrl+R` or `Cmd+R` on Mac) the VS Code window with your extension to load your changes + +* You can relaunch the extension from the debug toolbar after making changes to the files listed above. +* You can also reload (`Ctrl+R` or `Cmd+R` on Mac) the VS Code window with your extension to load your changes. ## Add more language features -* To add features such as intellisense, hovers and validators check out the VS Code extenders documentation at -https://code.visualstudio.com/docs + +* To add features such as intellisense, hovers and validators check out the VS Code extenders documentation at https://code.visualstudio.com/docs ## Install your extension -* To start using your extension with Visual Studio Code copy it into the /.vscode/extensions folder and restart Code. -* To share your extension with the world, read on https://code.visualstudio.com/docs about publishing an extension. \ No newline at end of file + +* To start using your extension with Visual Studio Code copy it into the `/.vscode/extensions` folder and restart Code. +* To share your extension with the world, read on https://code.visualstudio.com/docs about publishing an extension. diff --git a/vscode-nginx-0.0.1.vsix b/vscode-nginx-0.0.1.vsix new file mode 100644 index 0000000000000000000000000000000000000000..aed6257caab3952d49dea3658e4e447b0177749f GIT binary patch literal 7274 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 literal 0 HcmV?d00001