@@ -390,9 +390,9 @@ function Headline:get_title_with_priority()
390390 return title
391391end
392392
393- memoize (' get_properties ' )
393+ memoize (' get_own_properties ' )
394394--- @return table<string , string> , TSNode | nil
395- function Headline :get_properties ()
395+ function Headline :get_own_properties ()
396396 local section = self :node ():parent ()
397397 local properties_node = section and section :field (' property_drawer' )[1 ]
398398
@@ -416,6 +416,32 @@ function Headline:get_properties()
416416 return properties , properties_node
417417end
418418
419+ memoize (' get_properties' )
420+ --- @return table<string , string> , TSNode | nil
421+ function Headline :get_properties ()
422+ local properties , own_properties_node = self :get_own_properties ()
423+
424+ if not config .org_use_property_inheritance then
425+ return properties , own_properties_node
426+ end
427+
428+ local parent_section = self :node ():parent ():parent ()
429+ while parent_section do
430+ local headline_node = parent_section :field (' headline' )[1 ]
431+ if headline_node then
432+ local headline = Headline :new (headline_node , self .file )
433+ for name , value in pairs (headline :get_own_properties ()) do
434+ if properties [name ] == nil and config :use_property_inheritance (name ) then
435+ properties [name ] = value
436+ end
437+ end
438+ end
439+ parent_section = parent_section :parent ()
440+ end
441+
442+ return properties , own_properties_node
443+ end
444+
419445--- @param name string
420446--- @param value ? string
421447--- @return OrgHeadline
@@ -427,19 +453,19 @@ function Headline:set_property(name, value)
427453 vim .fn .deletebufline (bufnr , property_node :start () + 1 )
428454 end
429455 self :refresh ()
430- local properties , properties_node = self :get_properties ()
456+ local properties , properties_node = self :get_own_properties ()
431457 if vim .tbl_isempty (properties ) then
432458 self :_set_node_lines (properties_node , {})
433459 end
434460 return self :refresh ()
435461 end
436462
437- local _ , properties = self :get_properties ()
463+ local _ , properties = self :get_own_properties ()
438464 if not properties then
439465 local append_line = self :get_append_line ()
440466 local property_drawer = self :_apply_indent ({ ' :PROPERTIES:' , ' :END:' }) --[[ @as string[] ]]
441467 vim .api .nvim_buf_set_lines (bufnr , append_line , append_line , false , property_drawer )
442- _ , properties = self :refresh ():get_properties ()
468+ _ , properties = self :refresh ():get_own_properties ()
443469 end
444470
445471 local property = (' :%s: %s' ):format (name , value )
478504--- `org_use_property_inheritance`
479505--- @return string | nil , TSNode | nil
480506function Headline :get_property (property_name , search_parents )
481- local _ , properties = self :get_properties ()
507+ local _ , properties = self :get_own_properties ()
482508 if properties then
483509 for _ , node in ipairs (ts_utils .get_named_children (properties )) do
484510 local name = node :field (' name' )[1 ]
636662
637663--- @return number
638664function Headline :get_append_line ()
639- local _ , properties = self :get_properties ()
665+ local _ , properties = self :get_own_properties ()
640666 if properties then
641667 local row = properties :end_ ()
642668 return row
0 commit comments