Closed Ipswitch closed 7 years ago
Some things are matched directly, like the list of built in function keywords above (base64encode, etc.). Some things are matched by the form they take.
Is there anything specific you are seeing thats not working?
Rather than trying to match all the keywords exactly, the grammars try to match on the format that Terraform file entries require. For example, instead of matching aws_waf_ipset
it attempts to match the form of:
resource "aws_waf_ipset" "name" {
...
}
and so on.
If you give me some examples of what is not working as you expect, I'd be happy to take a look. Thanks for the feedback.
I'm new to Atom and misdirected the issue. What I wish to accomplish is done with an autocomplete provider for the Terraform language. Highlighting is OK, hints are better.
Understood, I'll see if I can update the list.
I'm playing with the following to update the language-terraform.cson file. You'll need to clean up captured examples, but it's a start.
for fn in grep -rPo --include \*.go ./builtin -e "((?<=\")[a-zA-Z0-9,_]*(?=\":\W*{))|((?<=\")[a-zA-Z0-9,_]*(?=\":\W*(&schema\.Schema)))|(?<=\")[a-zA-Z0-9,_]*(?=\":\W*(dataSource|resource))" | cut -d':' -f2 | sort | uniq
; do echo -e "\t'$fn':\n\t\t'prefix': 'expr substr $fn 1 2
'\n\t\t'body': \"$fn\""; done >> language-terraform/language-terraform/settings/language-terraform.cson
A contextual autocomplete is going to take more time than I have. This met the need and didn't break the snippets
git clone git@github.com:hashicorp/terraform.git; echo "'.source.terraform':" > ~/.atom/packages/language-terraform/snippets/keywords.cson; for fn in grep -rPo --include \*.go ./terraform/builtin -e "((?<=\")[a-zA-Z0-9,_]*(?=\":\W*{))|((?<=\")[a-zA-Z0-9,_]*(?=\":\W*(&schema\.Schema)))|(?<=\")[a-zA-Z0-9,_]*(?=\":\W*(dataSource|resource))" | cut -d':' -f2 | sort | uniq
; do if ! grep -Fxq " '$fn':" ~/.atom/packages/language-terraform/snippets/snippets.cson; then echo -e " '$fn':\n 'prefix': '$fn'\n 'body': \"$fn\"\n"; fi; done >> ~/.atom/packages/language-terraform/snippets/keywords.cson; rm -rf terraform
Thanks for the great suggestion and feedback. I'm slowly working on adding in autocomplete stuff to handle that as my time allows. I'm pretty swamped at work right now, but we'll get it in eventually. Just wanted to say I haven't forgotten about this.
After merging in your pull request, is okay if I close this?
I've just downloaded Atom to work with some terraform files and notice some keyword lists are short in the project.
I grep'd the terrrafrom source code, but would leave to you to update the .cson files. There are four patterns and I included the results for two. These caused some issues as the gtksourceview used with xed and gedit highlight functions could not handle a 54k regular expression. I'll leave it up to you.
echo
grep -rPo --include \*.go ./builtin -e "(?<=\")[a-zA-Z0-9,_]*(?=\":\W*(&schema\.Schema))" | cut -d':' -f2 | sort | uniq
| sed 's/\n//g' | sed 's/ /|/g'echo
grep -rPo --include \*.go ./builtin -e "(?<=\")[a-zA-Z0-9,_]*(?=\":\W*{)" | cut -d':' -f2 | sort | uniq
| sed 's/\n//g' | sed 's/ /|/g'echo
grep -rPo --include \*.go ./builtin -e "(?<=\")[a-zA-Z0-9,_]*(?=\":\W*(interpolationFunc))" | cut -d':' -f2| sort | uniq
| sed 's/\n//g' | sed 's/ /|/g' gives: base64decode|base64encode|cidrhost|cidrnetmask|cidrsubnet|coalesce|compact|concat|element|file|format|formatlist|index|join|length|lookup|lower|replace|split|upperecho
grep -rPo --include \*.go ./builtin -e "(?<=\")[a-zA-Z0-9,_]*(?=\":\W*(dataSource|resource))" | cut -d':' -f2 | sort | uniq
| sed 's/\n//g' | sed 's/ /|/g' gives: alicloud_disk|alicloud_disk_attachment|alicloud_eip|alicloud_eip_association|alicloud_images|alicloud_instance|alicloud_instance_types|alicloud_nat_gateway|alicloud_regions|alicloud_route_entry|alicloud_security_group|alicloud_security_group_rule|alicloud_slb|alicloud_slb_attachment|alicloud_subnet|alicloud_vpc|alicloud_vswitch|alicloud_zones|archive_file|arukas_container|atlas_artifact|aws_acm_certificate|aws_alb|aws_alb_listener|aws_alb_listener_rule|aws_alb_target_group|aws_alb_target_group_attachment|aws_ami|aws_ami_copy|aws_ami_from_instance|aws_ami_launch_permission|aws_api_gateway_account|aws_api_gateway_api_key|aws_api_gateway_authorizer|aws_api_gateway_base_path_mapping|aws_api_gateway_client_certificate|aws_api_gateway_deployment|aws_api_gateway_domain_name|aws_api_gateway_integration|aws_api_gateway_integration_response|aws_api_gateway_method|aws_api_gateway_method_response|aws_api_gateway_model|aws_api_gateway_resource|aws_api_gateway_rest_api|aws_appautoscaling_policy|aws_appautoscaling_target|aws_app_cookie_stickiness_policy|aws_autoscaling_attachment|aws_autoscaling_group|aws_autoscaling_groups|aws_autoscaling_lifecycle_hook|aws_autoscaling_notification|aws_autoscaling_policy|aws_autoscaling_schedule|aws_availability_zone|aws_availability_zones|aws_billing_service_account|aws_caller_identity|aws_canonical_user_id|aws_cloudformation_stack|aws_cloudfront_distribution|aws_cloudfront_origin_access_identity|aws_cloudtrail|aws_cloudwatch_event_rule|aws_cloudwatch_event_target|aws_cloudwatch_log_group|aws_cloudwatch_log_metric_filter|aws_cloudwatch_log_stream|aws_cloudwatch_log_subscription_filter|aws_cloudwatch_metric_alarm|aws_codebuild_project|aws_codecommit_repository|aws_codecommit_trigger|aws_codedeploy_app|aws_codedeploy_deployment_config|aws_codedeploy_deployment_group|aws_config_config_rule|aws_config_configuration_recorder|aws_config_configuration_recorder_status|aws_config_delivery_channel|aws_customer_gateway|aws_db_event_subscription|aws_db_instance|aws_db_option_group|aws_db_parameter_group|aws_db_security_group|aws_db_subnet_group|aws_default_network_acl|aws_default_route_table|aws_default_security_group|aws_directory_service_directory|aws_dms_certificate|aws_dms_endpoint|aws_dms_replication_instance|aws_dms_replication_subnet_group|aws_dms_replication_task|aws_dynamodb_table|aws_ebs_snapshot|aws_ebs_volume|aws_ecr_repository|aws_ecr_repository_policy|aws_ecs_cluster|aws_ecs_container_definition|aws_ecs_service|aws_ecs_task_definition|aws_efs_file_system|aws_efs_mount_target|aws_eip|aws_eip_association|aws_elasticache_cluster|aws_elasticache_parameter_group|aws_elasticache_replication_group|aws_elasticache_security_group|aws_elasticache_subnet_group|aws_elastic_beanstalk_application|aws_elastic_beanstalk_application_version|aws_elastic_beanstalk_configuration_template|aws_elastic_beanstalk_environment|aws_elasticsearch_domain|aws_elasticsearch_domain_policy|aws_elastictranscoder_pipeline|aws_elastictranscoder_preset|aws_elb|aws_elb_attachment|aws_elb_hosted_zone_id|aws_elb_service_account|aws_emr_cluster|aws_emr_instance_group|aws_flow_log|aws_glacier_vault|aws_iam_access_key|aws_iam_account_alias|aws_iam_account_password_policy|aws_iam_group|aws_iam_group_membership|aws_iam_group_policy|aws_iam_group_policy_attachment|aws_iam_instance_profile|aws_iam_policy|aws_iam_policy_attachment|aws_iam_policy_document|aws_iam_role|aws_iam_role_policy|aws_iam_role_policy_attachment|aws_iam_saml_provider|aws_iam_server_certificate|aws_iam_user|aws_iam_user_login_profile|aws_iam_user_policy|aws_iam_user_policy_attachment|aws_iam_user_ssh_key|aws_inspector_assessment_target|aws_inspector_assessment_template|aws_inspector_resource_group|aws_instance|aws_internet_gateway|aws_ip_ranges|aws_key_pair|aws_kinesis_firehose_delivery_stream|aws_kinesis_stream|aws_kms_alias|aws_kms_key|aws_kms_secret|aws_lambda_alias|aws_lambda_event_source_mapping|aws_lambda_function|aws_lambda_permission|aws_launch_configuration|aws_lb_cookie_stickiness_policy|aws_lb_ssl_negotiation_policy|aws_lightsail_domain|aws_lightsail_instance|aws_lightsail_key_pair|aws_load_balancer_backend_server_policy|aws_load_balancer_listener_policy|aws_load_balancer_policy|aws_main_route_table_association|aws_nat_gateway|aws_network_acl|aws_network_acl_rule|aws_network_interface|aws_opsworks_application|aws_opsworks_custom_layer|aws_opsworks_ganglia_layer|aws_opsworks_haproxy_layer|aws_opsworks_instance|aws_opsworks_java_app_layer|aws_opsworks_memcached_layer|aws_opsworks_mysql_layer|aws_opsworks_nodejs_app_layer|aws_opsworks_permission|aws_opsworks_php_app_layer|aws_opsworks_rails_app_layer|aws_opsworks_rds_db_instance|aws_opsworks_stack|aws_opsworks_static_web_layer|aws_opsworks_user_profile|aws_partition|aws_placement_group|aws_prefix_list|aws_proxy_protocol_policy|aws_rds_cluster|aws_rds_cluster_instance|aws_rds_cluster_parameter_group|aws_redshift_cluster|aws_redshift_parameter_group|aws_redshift_security_group|aws_redshift_service_account|aws_redshift_subnet_group|aws_region|aws_route|aws_route53_delegation_set|aws_route53_health_check|aws_route53_record|aws_route53_zone|aws_route53_zone_association|aws_route_table|aws_route_table_association|aws_s3_bucket|aws_s3_bucket_notification|aws_s3_bucket_object|aws_s3_bucket_policy|aws_security_group|aws_security_group_rule|aws_ses_active_receipt_rule_set|aws_ses_configuration_set|aws_ses_event_destination|aws_ses_receipt_filter|aws_ses_receipt_rule|aws_ses_receipt_rule_set|aws_sfn_activity|aws_sfn_state_machine|aws_simpledb_domain|aws_snapshot_create_volume_permission|aws_sns_topic|aws_sns_topic_policy|aws_sns_topic_subscription|aws_spot_datafeed_subscription|aws_spot_fleet_request|aws_spot_instance_request|aws_sqs_queue|aws_sqs_queue_policy|aws_ssm_activation|aws_ssm_association|aws_ssm_document|aws_subnet|aws_volume_attachment|aws_vpc|aws_vpc_dhcp_options|aws_vpc_dhcp_options_association|aws_vpc_endpoint|aws_vpc_endpoint_route_table_association|aws_vpc_endpoint_service|aws_vpc_peering_connection|aws_vpc_peering_connection_accepter|aws_vpn_connection|aws_vpn_connection_route|aws_vpn_gateway|aws_vpn_gateway_attachment|aws_waf_byte_match_set|aws_waf_ipset|aws_waf_rule|aws_waf_size_constraint_set|aws_waf_sql_injection_match_set|aws_waf_web_acl|aws_waf_xss_match_set|azure_affinity_group|azure_data_disk|azure_dns_server|azure_hosted_service|azure_instance|azure_local_network_connection|azurerm_availability_set|azurerm_cdn_endpoint|azurerm_cdn_profile|azurerm_client_config|azurerm_container_registry|azurerm_container_service|azurerm_dns_aaaa_record|azurerm_dns_a_record|azurerm_dns_cname_record|azurerm_dns_mx_record|azurerm_dns_ns_record|azurerm_dns_srv_record|azurerm_dns_txt_record|azurerm_dns_zone|azurerm_eventhub|azurerm_eventhub_authorization_rule|azurerm_eventhub_consumer_group|azurerm_eventhub_namespace|azurerm_key_vault|azurerm_lb|azurerm_lb_backend_address_pool|azurerm_lb_nat_pool|azurerm_lb_nat_rule|azurerm_lb_probe|azurerm_lb_rule|azurerm_local_network_gateway|azurerm_network_interface|azurerm_network_security_group|azurerm_network_security_rule|azurerm_public_ip|azurerm_redis_cache|azurerm_resource_group|azurerm_route|azurerm_route_table|azurerm_search_service|azurerm_servicebus_namespace|azurerm_servicebus_subscription|azurerm_servicebus_topic|azurerm_sql_database|azurerm_sql_firewall_rule|azurerm_sql_server|azurerm_storage_account|azurerm_storage_blob|azurerm_storage_container|azurerm_storage_queue|azurerm_storage_share|azurerm_storage_table|azurerm_subnet|azurerm_template_deployment|azurerm_traffic_manager_endpoint|azurerm_traffic_manager_profile|azurerm_virtual_machine|azurerm_virtual_machine_extension|azurerm_virtual_machine_scale_set|azurerm_virtual_network|azurerm_virtual_network_peering|azure_security_group|azure_security_group_rule|azure_sql_database_server|azure_sql_database_server_firewall_rule|azure_sql_database_service|azure_storage_blob|azure_storage_container|azure_storage_queue|azure_storage_service|azure_virtual_network|bitbucket_default_reviewers|bitbucket_hook|bitbucket_repository|chef_acl|chef_client|chef_cookbook|chef_data_bag|chef_data_bag_item|chef_environment|chef_node|chef_role|clc_group|clc_load_balancer|clc_load_balancer_pool|clc_public_ip|clc_server|cloudflare_record|cloudstack_affinity_group|cloudstack_disk|cloudstack_egress_firewall|cloudstack_firewall|cloudstack_instance|cloudstack_ipaddress|cloudstack_loadbalancer_rule|cloudstack_network|cloudstack_network_acl|cloudstack_network_acl_rule|cloudstack_nic|cloudstack_port_forward|cloudstack_private_gateway|cloudstack_secondary_ipaddress|cloudstack_security_group|cloudstack_security_group_rule|cloudstack_ssh_keypair|cloudstack_static_nat|cloudstack_static_route|cloudstack_template|cloudstack_vpc|cloudstack_vpn_connection|cloudstack_vpn_customer_gateway|cloudstack_vpn_gateway|cobbler_distro|cobbler_kickstart_file|cobbler_profile|cobbler_snippet|cobbler_system|consul_agent_self|consul_agent_service|consul_catalog_entry|consul_catalog_nodes|consul_catalog_service|consul_catalog_services|consul_key_prefix|consul_keys|consul_node|consul_prepared_query|consul_service|datadog_monitor|datadog_timeboard|digitalocean_domain|digitalocean_droplet|digitalocean_floating_ip|digitalocean_record|digitalocean_ssh_key|digitalocean_tag|digitalocean_volume|dme_record|dns_aaaa_record_set|dns_a_record_set|dns_cname_record|dnsimple_record|dns_ptr_record|docker_container|docker_image|docker_network|docker_registry_image|docker_volume|dyn_record|external|fastly_ip_ranges|fastly_service_v1|filter|github_issue_label|github_membership|github_repository|github_repository_collaborator|github_team|github_team_membership|github_team_repository|google_compute_address|google_compute_autoscaler|google_compute_backend_service|google_compute_disk|google_compute_firewall|google_compute_forwarding_rule|google_compute_global_address|google_compute_global_forwarding_rule|google_compute_health_check|google_compute_http_health_check|google_compute_https_health_check|google_compute_image|google_compute_instance|google_compute_instance_group|google_compute_instance_group_manager|google_compute_instance_template|google_compute_network|google_compute_project_metadata|google_compute_region_backend_service|google_compute_route|google_compute_ssl_certificate|google_compute_subnetwork|google_compute_target_http_proxy|google_compute_target_https_proxy|google_compute_target_pool|google_compute_url_map|google_compute_vpn_gateway|google_compute_vpn_tunnel|google_compute_zones|google_container_cluster|google_dns_managed_zone|google_dns_record_set|google_iam_policy|google_project|google_project_iam_policy|google_project_services|google_pubsub_subscription|google_pubsub_topic|google_service_account|google_sql_database|google_sql_database_instance|google_sql_user|google_storage_bucket|google_storage_bucket_acl|google_storage_bucket_object|google_storage_object_acl|heroku_addon|heroku_app|heroku_cert|heroku_domain|heroku_drain|icinga2_checkcommand|icinga2_host|icinga2_hostgroup|icinga2_service|ignition_config|ignition_disk|ignition_file|ignition_filesystem|ignition_group|ignition_networkd_unit|ignition_raid|ignition_systemd_unit|ignition_user|influxdb_continuous_query|influxdb_database|influxdb_user|librato_alert|librato_service|librato_space|librato_space_chart|location|logentries_log|logentries_logset|mailgun_domain|mysql_database|mysql_grant|mysql_user|newrelic_alert_channel|newrelic_alert_condition|newrelic_alert_policy|newrelic_alert_policy_channel|newrelic_application|nomad_job|not_principals|ns1_datasource|null_data_source|null_resource|openstack_blockstorage_volume_attach_v2|openstack_blockstorage_volume_v1|openstack_blockstorage_volume_v2|openstack_compute_floatingip_v2|openstack_compute_instance_v2|openstack_compute_keypair_v2|openstack_compute_secgroup_v2|openstack_compute_servergroup_v2|openstack_compute_volume_attach_v2|openstack_fw_firewall_v1|openstack_fw_policy_v1|openstack_fw_rule_v1|openstack_images_image_v2|openstack_lb_listener_v2|openstack_lb_loadbalancer_v2|openstack_lb_member_v1|openstack_lb_member_v2|openstack_lb_monitor_v1|openstack_lb_monitor_v2|openstack_lb_pool_v1|openstack_lb_pool_v2|openstack_lb_vip_v1|openstack_networking_floatingip_v2|openstack_networking_network_v2|openstack_networking_port_v2|openstack_networking_router_interface_v2|openstack_networking_router_route_v2|openstack_networking_router_v2|openstack_networking_secgroup_rule_v2|openstack_networking_secgroup_v2|openstack_networking_subnet_v2|openstack_objectstorage_container_v1|opsgenie_team|opsgenie_user|packet_device|packet_project|packet_ssh_key|packet_volume|pagerduty_addon|pagerduty_escalation_policy|pagerduty_schedule|pagerduty_service|pagerduty_service_integration|pagerduty_team|pagerduty_user|pagerduty_vendor|postgresql_database|postgresql_extension|postgresql_role|postgresql_schema|powerdns_record|principals|profitbricks_datacenter|profitbricks_firewall|profitbricks_image|profitbricks_ipblock|profitbricks_lan|profitbricks_loadbalancer|profitbricks_location|profitbricks_nic|profitbricks_server|profitbricks_volume|rabbitmq_binding|rabbitmq_exchange|rabbitmq_permissions|rabbitmq_policy|rabbitmq_queue|rabbitmq_user|rabbitmq_vhost|rancher_environment|rancher_registration_token|rancher_registry|rancher_registry_credential|rancher_stack|random_id|random_shuffle|rundeck_job|rundeck_private_key|rundeck_project|rundeck_public_key|scaleway_bootscript|scaleway_image|scaleway_ip|scaleway_security_group|scaleway_security_group_rule|scaleway_server|scaleway_volume|scaleway_volume_attachment|softlayer_ssh_key|softlayer_virtual_guest|statuscake_test|tags|template_cloudinit_config|template_file|terraform_remote_state|tls_cert_request|tls_locally_signed_cert|tls_private_key|tls_self_signed_cert|triton_fabric|triton_firewall_rule|triton_key|triton_machine|triton_vlan|ultradns_dirpool|ultradns_probe_http|ultradns_probe_ping|ultradns_record|ultradns_tcpool|vcd_dnat|vcd_firewall_rules|vcd_network|vcd_snat|vcd_vapp|vsphere_file|vsphere_folder|vsphere_virtual_disk|vsphere_virtual_machine