gs []string

// PropertyIRIs casts PropertyIRIStrings into PropertyIRIs
func (p PropertyIRIStrings) PropertyIRIs() PropertyIRIs {
	var iris PropertyIRIs
	for _, iri := range p {
		iris = append(iris, PropertyIRI(iri))
	}
	return iris
}

// BuildPath implements PropertyPath.
func (p PropertyIRIStrings) BuildPath(qs graph.QuadStore, ns *voc.Namespaces) (*path.Path, error) {
	return p.PropertyIRIs().BuildPath(qs, ns)
}

// PropertyIRI is an IRI of a Property
type PropertyIRI quad.IRI

func (p PropertyIRI) full(ns *voc.Namespaces) quad.IRI {
	return quad.IRI(p).FullWith(ns)
}

// BuildPath implements PropertyPath
func (p PropertyIRI) BuildPath(qs graph.QuadStore, ns *voc.Namespaces) (*path.Path, error) {
	return path.StartPath(qs, p.full(ns)), nil
}

// PropertyIRIString is a string of IRI of a Property
type PropertyIRIString string

// BuildPath implements PropertyPath
func (p PropertyIRIString) BuildPath(qs graph.QuadStore, ns *voc.Namespaces) (*path.Path, error) {
	iri := PropertyIRI(p)
	return iri.BuildPath(qs, ns)
}

// PropertyStep is a step that should resolve to a path of properties
type PropertyStep struct {
	PathStep
}

// BuildPath implements PropertyPath
func (p PropertyStep) BuildPath(qs graph.QuadStore, ns *voc.Namespaces) (*path.Path, error) {
	return p.BuildPath(qs, ns)
}


# Toy VS Code Extension for clangd

## 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 extension and command.
The sample plugin registers a command and defines its title and command name. With this information
VS Code can show the command in the command palette. It doesn’t yet need to load the plugin.
* `src/extension.ts` - this is the main file where you will provide the implementation of your command.
The file exports one function, `activate`, which is called the very first time your extension is
activated (in this case by executing the command). Inside the `activate` function we call `registerCommand`.
We pass the f