diff --git a/docs/_config.yml b/docs/_config.yml index 22c95620b5..86838109bd 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -3,6 +3,7 @@ repository: pmd/pmd pmd: version: 6.7.0 date: 2018-??-?? + release_type: minor output: web # this property is useful for conditional filtering of content that is separate from the PDF. diff --git a/docs/_plugins/rule_tag.rb b/docs/_plugins/rule_tag.rb new file mode 100644 index 0000000000..cb2c8e266f --- /dev/null +++ b/docs/_plugins/rule_tag.rb @@ -0,0 +1,69 @@ + + +# Tag to reference a rule +# Usage: +# {% rule "java/codestyle/LinguisticNaming" %} works from anywhere +# If inside the doc page of a ruleset/category, the language and +# category segment can be dropped, they're taken to be the same. +# That means rule descriptions can reference rules e.g. by simply +# saying {% rule AvoidFinalLocalVars %} if they're in the same category +# This could allow deprecated rule notices to link to the replacement rule + +class RuleTag < Liquid::Tag + def initialize(tag_name, rule_ref, tokens) + super + + if %r!(?:(?:(\w+)/)?(\w+)/)?(\w+)! =~ rule_ref + + @lang_name = $1 + @category_name = $2 + @rule_name = $3 + + else + fail "Invalid rule reference format" + end + + end + + def render(context) + + + + if /pmd_rules_(\w+)_(\w+)\.html/ =~ context["page.permalink"] + # If we're in a page describing a ruleset, + # omitted language or category are taken to be that of this page + @lang_name = @lang_name || $1 + @category_name = @category_name || $2 + end + + + unless @category_name + fail "no category for rule reference, and no implicit category name available" + end + + unless @lang_name + fail "no language for rule reference, and no implicit language name available" + end + + + url_prefix = "" + if (version = context["site.pmd.version"]) + url_prefix = "https://pmd.github.io/pmd-#{version}/" + end + + markup_link(@rule_name, url_prefix + relativelink(@lang_name, @category_name, @rule_name)) + end + + private + + def relativelink(lang, cat, rname) + "pmd_rules_#{lang}_#{cat}.html##{rname.downcase}" + end + + def markup_link(rname, link) + "[`#{rname}`](#{link})" + end + +end + +Liquid::Template.register_tag('rule', RuleTag) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 65deb54c44..13f31e86d2 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -4,11 +4,11 @@ permalink: pmd_release_notes.html keywords: changelog, release notes --- -## ????? - 6.7.0-SNAPSHOT +## {{ site.pmd.date }} - {{ site.pmd.version }} -The PMD team is pleased to announce PMD 6.7.0. +The PMD team is pleased to announce PMD {{ site.pmd.version }}. -This is a minor release. +This is a {{ site.pmd.release_type }} release. ### Table Of Contents @@ -22,7 +22,7 @@ This is a minor release. #### New Rules -* The new Java rule [`LinguisticNaming`](pmd_rules_java_codestyle.html#linguisticnaming) (`java-codestyle`) +* The new Java rule {% rule "java/codestyle/LinguisticNaming" %} (`java-codestyle`) detects cases, when a method name indicates it returns a boolean (such as `isSmall()`) but it doesn't. Besides method names, the rule also checks field and variable names. It also checks, that getters return something but setters won't. The rule has several properties with which it can be customized. diff --git a/preprocess_release_notes.rb b/preprocess_release_notes.rb new file mode 100755 index 0000000000..8c2ddd2221 --- /dev/null +++ b/preprocess_release_notes.rb @@ -0,0 +1,16 @@ +#!/usr/bin/env ruby + + +require "liquid" +require "yaml" +require_relative "docs/_plugins/rule_tag" +require_relative "docs/_plugins/custom_filters" + + +release_notes_file = "docs/pages/release_notes.md" + +# wrap the config under a "site." namespace because that's how jekyll does it +liquid_env = {'site' => YAML.load_file("docs/_config.yml")} + +@template = Liquid::Template.parse(File.read(release_notes_file)) +print(@template.render(liquid_env))