From 35822b60241575fdf580f32b3b5deb9bc8b615a2 Mon Sep 17 00:00:00 2001 From: Julio Tain Sueiras Date: Thu, 12 Sep 2019 15:45:16 -0400 Subject: [PATCH] Added completion for resource-like class Modified completion provider to allow completion for resource-like class link: https://puppet.com/docs/puppet/5.3/lang_classes.html#using-resource-like-declarations class keyword behave like resource when using a defined class, and name parameter become the class name to lookup by the helper --- .../manifest/completion_provider.rb | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/lib/puppet-languageserver/manifest/completion_provider.rb b/lib/puppet-languageserver/manifest/completion_provider.rb index 1654644e..f46b90ee 100644 --- a/lib/puppet-languageserver/manifest/completion_provider.rb +++ b/lib/puppet-languageserver/manifest/completion_provider.rb @@ -55,7 +55,14 @@ def self.complete(content, line_num, char_num, options = {}) # properities and parameters. # Try Types first - item_object = PuppetLanguageServer::PuppetHelper.get_type(item.type_name.value) + if item.type_name.value == 'class' + item_object = PuppetLanguageServer::PuppetHelper.get_type(item.bodies[0].title.value) + item_value = item.bodies[0].title.value + else + item_object = PuppetLanguageServer::PuppetHelper.get_type(item.type_name.value) + item_value = item.type_name.value + end + unless item_object.nil? # Add Parameters item_object.attributes.select { |_name, data| data[:type] == :param }.each_key do |name| @@ -66,7 +73,7 @@ def self.complete(content, line_num, char_num, options = {}) 'data' => { 'type' => 'resource_parameter', 'param' => name.to_s, - 'resource_type' => item.type_name.value + 'resource_type' => item_value } ) end @@ -79,7 +86,7 @@ def self.complete(content, line_num, char_num, options = {}) 'data' => { 'type' => 'resource_property', 'prop' => name.to_s, - 'resource_type' => item.type_name.value + 'resource_type' => item_value } ) end @@ -87,7 +94,7 @@ def self.complete(content, line_num, char_num, options = {}) end if item_object.nil? # Try Classes/Defined Types - item_object = PuppetLanguageServer::PuppetHelper.get_class(item.type_name.value) + item_object = PuppetLanguageServer::PuppetHelper.get_class(item_value) unless item_object.nil? # Add Parameters item_object.parameters.each_key do |name| @@ -98,7 +105,7 @@ def self.complete(content, line_num, char_num, options = {}) 'data' => { 'type' => 'resource_class_parameter', 'param' => name.to_s, - 'resource_type' => item.type_name.value + 'resource_type' => item_value } ) end