From 7eec424274672f7b534a35a3bd1c9009ad33f072 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 27 Oct 2025 00:12:24 +0800 Subject: [PATCH] chore: remove references handling from markdown extraction --- plugin/markdown/markdown.go | 48 ++------------------- plugin/markdown/markdown_test.go | 67 ----------------------------- proto/gen/store/memo.pb.go | 22 +++------- proto/store/memo.proto | 2 - server/runner/memopayload/runner.go | 3 -- 5 files changed, 9 insertions(+), 133 deletions(-) diff --git a/plugin/markdown/markdown.go b/plugin/markdown/markdown.go index 1ee630fb8..364c1e0d6 100644 --- a/plugin/markdown/markdown.go +++ b/plugin/markdown/markdown.go @@ -19,9 +19,8 @@ import ( // ExtractedData contains all metadata extracted from markdown in a single pass. type ExtractedData struct { - Tags []string - Property *storepb.MemoPayload_Property - References []string + Tags []string + Property *storepb.MemoPayload_Property } // Service handles markdown metadata extraction. @@ -38,9 +37,6 @@ type Service interface { // ExtractProperties computes boolean properties ExtractProperties(content []byte) (*storepb.MemoPayload_Property, error) - // ExtractReferences returns all wikilink references ([[...]]) found in content - ExtractReferences(content []byte) ([]string, error) - // RenderMarkdown renders goldmark AST back to markdown text RenderMarkdown(content []byte) (string, error) @@ -195,36 +191,6 @@ func (s *service) ExtractProperties(content []byte) (*storepb.MemoPayload_Proper return prop, nil } -// ExtractReferences returns all wikilink references found in content. -func (s *service) ExtractReferences(content []byte) ([]string, error) { - root, err := s.parse(content) - if err != nil { - return nil, err - } - - references := []string{} // Initialize to empty slice, not nil - - // Walk the AST to find wikilink nodes - err = gast.Walk(root, func(n gast.Node, entering bool) (gast.WalkStatus, error) { - if !entering { - return gast.WalkContinue, nil - } - - // Check for custom WikilinkNode - if wikilinkNode, ok := n.(*mast.WikilinkNode); ok { - references = append(references, string(wikilinkNode.Target)) - } - - return gast.WalkContinue, nil - }) - - if err != nil { - return nil, err - } - - return references, nil -} - // RenderMarkdown renders goldmark AST back to markdown text. func (s *service) RenderMarkdown(content []byte) (string, error) { root, err := s.parse(content) @@ -338,9 +304,8 @@ func (s *service) ExtractAll(content []byte) (*ExtractedData, error) { } data := &ExtractedData{ - Tags: []string{}, - Property: &storepb.MemoPayload_Property{}, - References: []string{}, + Tags: []string{}, + Property: &storepb.MemoPayload_Property{}, } // Single walk to collect all data @@ -354,11 +319,6 @@ func (s *service) ExtractAll(content []byte) (*ExtractedData, error) { data.Tags = append(data.Tags, string(tagNode.Tag)) } - // Extract references (wikilinks) - if wikilinkNode, ok := n.(*mast.WikilinkNode); ok { - data.References = append(data.References, string(wikilinkNode.Target)) - } - // Extract properties based on node kind switch n.Kind() { case gast.KindLink, mast.KindWikilink: diff --git a/plugin/markdown/markdown_test.go b/plugin/markdown/markdown_test.go index 6260c7470..92fb7dad8 100644 --- a/plugin/markdown/markdown_test.go +++ b/plugin/markdown/markdown_test.go @@ -302,73 +302,6 @@ func TestExtractTags(t *testing.T) { } } -func TestExtractReferences(t *testing.T) { - tests := []struct { - name string - content string - withExt bool - expected []string - }{ - { - name: "no references", - content: "Just plain text", - withExt: false, - expected: []string{}, - }, - { - name: "single wikilink", - content: "Check this: [[resources/101]]", - withExt: true, - expected: []string{"resources/101"}, - }, - { - name: "multiple wikilinks", - content: "[[resources/101]]\n\nAnd also: [[memos/42]]", - withExt: true, - expected: []string{"resources/101", "memos/42"}, - }, - { - name: "wikilink with params", - content: "[[resources/101?align=center]]", - withExt: true, - expected: []string{"resources/101"}, - }, - { - name: "duplicate wikilinks", - content: "[[resources/101]]\n\n[[resources/101]]", - withExt: true, - expected: []string{"resources/101", "resources/101"}, // Not deduplicated at this layer - }, - { - name: "no extension enabled", - content: "[[resources/101]]", - withExt: false, - expected: []string{}, - }, - { - name: "wikilink in sentence", - content: "Check [[memos/1]] for details", - withExt: true, - expected: []string{"memos/1"}, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - var svc Service - if tt.withExt { - svc = NewService(WithWikilinkExtension()) - } else { - svc = NewService() - } - - references, err := svc.ExtractReferences([]byte(tt.content)) - require.NoError(t, err) - assert.Equal(t, tt.expected, references) - }) - } -} - func TestUniqueLowercase(t *testing.T) { tests := []struct { name string diff --git a/proto/gen/store/memo.pb.go b/proto/gen/store/memo.pb.go index 8c979c79f..816d0caab 100644 --- a/proto/gen/store/memo.pb.go +++ b/proto/gen/store/memo.pb.go @@ -88,10 +88,8 @@ type MemoPayload_Property struct { HasTaskList bool `protobuf:"varint,2,opt,name=has_task_list,json=hasTaskList,proto3" json:"has_task_list,omitempty"` HasCode bool `protobuf:"varint,3,opt,name=has_code,json=hasCode,proto3" json:"has_code,omitempty"` HasIncompleteTasks bool `protobuf:"varint,4,opt,name=has_incomplete_tasks,json=hasIncompleteTasks,proto3" json:"has_incomplete_tasks,omitempty"` - // The references of the memo. Should be a list of uuid. - References []string `protobuf:"bytes,5,rep,name=references,proto3" json:"references,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *MemoPayload_Property) Reset() { @@ -152,13 +150,6 @@ func (x *MemoPayload_Property) GetHasIncompleteTasks() bool { return false } -func (x *MemoPayload_Property) GetReferences() []string { - if x != nil { - return x.References - } - return nil -} - type MemoPayload_Location struct { state protoimpl.MessageState `protogen:"open.v1"` Placeholder string `protobuf:"bytes,1,opt,name=placeholder,proto3" json:"placeholder,omitempty"` @@ -223,19 +214,16 @@ var File_store_memo_proto protoreflect.FileDescriptor const file_store_memo_proto_rawDesc = "" + "\n" + - "\x10store/memo.proto\x12\vmemos.store\"\xc0\x03\n" + + "\x10store/memo.proto\x12\vmemos.store\"\xa0\x03\n" + "\vMemoPayload\x12=\n" + "\bproperty\x18\x01 \x01(\v2!.memos.store.MemoPayload.PropertyR\bproperty\x12=\n" + "\blocation\x18\x02 \x01(\v2!.memos.store.MemoPayload.LocationR\blocation\x12\x12\n" + - "\x04tags\x18\x03 \x03(\tR\x04tags\x1a\xb6\x01\n" + + "\x04tags\x18\x03 \x03(\tR\x04tags\x1a\x96\x01\n" + "\bProperty\x12\x19\n" + "\bhas_link\x18\x01 \x01(\bR\ahasLink\x12\"\n" + "\rhas_task_list\x18\x02 \x01(\bR\vhasTaskList\x12\x19\n" + "\bhas_code\x18\x03 \x01(\bR\ahasCode\x120\n" + - "\x14has_incomplete_tasks\x18\x04 \x01(\bR\x12hasIncompleteTasks\x12\x1e\n" + - "\n" + - "references\x18\x05 \x03(\tR\n" + - "references\x1af\n" + + "\x14has_incomplete_tasks\x18\x04 \x01(\bR\x12hasIncompleteTasks\x1af\n" + "\bLocation\x12 \n" + "\vplaceholder\x18\x01 \x01(\tR\vplaceholder\x12\x1a\n" + "\blatitude\x18\x02 \x01(\x01R\blatitude\x12\x1c\n" + diff --git a/proto/store/memo.proto b/proto/store/memo.proto index 56e748891..bd50df921 100644 --- a/proto/store/memo.proto +++ b/proto/store/memo.proto @@ -17,8 +17,6 @@ message MemoPayload { bool has_task_list = 2; bool has_code = 3; bool has_incomplete_tasks = 4; - // The references of the memo. Should be a list of uuid. - repeated string references = 5; } message Location { diff --git a/server/runner/memopayload/runner.go b/server/runner/memopayload/runner.go index a1b0cb372..4e262da70 100644 --- a/server/runner/memopayload/runner.go +++ b/server/runner/memopayload/runner.go @@ -82,9 +82,6 @@ func RebuildMemoPayload(memo *store.Memo, markdownService markdown.Service) erro return errors.Wrap(err, "failed to extract markdown metadata") } - // Set references in property - data.Property.References = data.References - memo.Payload.Tags = data.Tags memo.Payload.Property = data.Property return nil